20170513_一步一步写数据结构(二叉树的建立和遍历)
来源:互联网 发布:java加密文件怎么解密 编辑:程序博客网 时间:2024/06/05 09:24
20170513_一步一步写数据结构(二叉树的建立和遍历)
二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用。
今天主要写的最基本的二叉树,后续会继续写线索二叉树,二叉排序树,平衡二叉树等。
二叉树的建立思路仍然是采用的递归的思想,给定一个指向根节点的指针,然后递归调用ceate()函数,自动生成一个二叉树。就像是在地上挖了个坑(根节点),然后他会拿着斧子(create函数)自己挖一颗很大的洞穴(二叉树)出来。当然挖坑前需要先定义每个洞长什么样(定义节点结构)。
废话有点多,下面上代码:
#include<iostream>using namespace std;typedef struct node{ struct node *lchild; struct node *rchild; char data;}BiTreeNode, *BiTree; //这里的*BiTree意思是给 struct node*起了个别名,叫BiTree,所以BiTree为指向节点的指针, 并且可以作为指向二叉树根节点的指针(用以指示二叉树)。void createBiTree(BiTree &T) //这里加上&意思是传递的参数为指针的引用,括号里面等价于 BiTreeNode* &T{ //这样的意义在于在函数执行过后,传递进来的指针会发生改变(引用的作用),不可以去掉& char c; cin >> c; if('#' == c) //当遇到#时,令树的根节点为NULL,从而结束该分支的递归 T = NULL; else { T = new BiTreeNode; T->data=c; createBiTree(T->lchild); createBiTree(T->rchild); }}//前序遍历二叉树并打印出来void preorder(BiTree T){ if(T) { cout<<T->data<<" "; preorder(T->lchild); preorder(T->rchild); }}//中序遍历二叉树并打印出来void midorder(BiTree T){ if(T) { midorder(T->lchild); cout<<T->data<<" "; midorder(T->rchild); }}//后续遍历二叉树并打印出来void postorder(BiTree T){ if(T) { postorder(T->lchild); postorder(T->rchild); cout<<T->data<<" "; }}int main(){ BiTree T; //声明一个指向二叉树根节点的指针 createBiTree(T); cout<<"二叉树创建完成!"<<endl; cout<<"前序遍历二叉树:"<<endl; preorder(T); cout<<endl; cout<<"中序遍历二叉树:"<<endl; midorder(T); cout<<endl; cout<<"后序遍历二叉树:"<<endl; postorder(T); return 0;}
只是完成了最基本的功能,没有写打印层数等功能,后续有时间会补上。下面是控制台结果,输入的是一个最简单的数,复杂的也测试了,没问题,因为要画图比较麻烦没有截那个图。
0 0
- 20170513_一步一步写数据结构(二叉树的建立和遍历)
- 一步一步复习数据结构和算法基础-层次建立层次遍历二叉树
- 数据结构——二叉树的建立和遍历(递归建树&层序遍历建树)
- 数据结构:二叉树的建立和遍历(C#实现)
- 数据结构之二叉树的递归建立和遍历
- 数据结构之二叉树的递归建立和遍历(续)
- 【数据结构基础】二叉树的建立和递归遍历
- 常用数据结构-二叉树的链式存储、建立和遍历
- 数据结构_树_二叉树的建立、遍历、复制与移除_二叉链表存储_C++实现
- 数据结构 二叉树的建立与遍历
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 数据结构_二叉树的遍历
- 数据结构(十一)——二叉树的遍历和建立
- 数据结构(十一)——二叉树的遍历和建立
- 【二叉树的建立和遍历】SDUTOJ 2136---数据结构实验之二叉树的建立与遍历
- 一步一步写算法(之二叉树广度遍历)
- 一步一步写算法(之二叉树深度遍历)
- 一步一步写算法(之二叉树深度遍历)
- 开通博客!
- 算法导论 练习题 13.3-4
- Android基础总结——进程优先级及提高优先级的方法(Service尽量不死之法)
- Linux内核调试技术——Fault-injection故障注入
- Latex 图片转为eps格式
- 20170513_一步一步写数据结构(二叉树的建立和遍历)
- 程序员编程能力层次模型
- 445端口入侵详解
- jeclipse中编译问题
- Watson Explorer 入门(11):配置词典和规则
- android 雷达图 蜘蛛图
- 排序:入门及桶排序
- TCP-IP详解之TCP的超时与重传4
- [leetcode: Python]278.First Bad Version