二叉树的建立和遍历

Posted 我为编程上架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的建立和遍历相关的知识,希望对你有一定的参考价值。

二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用。

今天主要写的最基本的二叉树,后续会继续写线索二叉树,二叉排序树,平衡二叉树等。

二叉树的建立思路仍然是采用的递归的思想,给定一个指向根节点的指针,然后递归调用ceate()函数,自动生成一个二叉树。就像是在地上挖了个坑(根节点),然后他会拿着斧子(create函数)自己挖一颗很大的洞穴(二叉树)出来。当然挖坑前需要先定义每个洞长什么样(定义节点结构)。

 

 1 #include<iostream>
 2 using namespace std;
 3 
 4 typedef struct node
 5 {
 6     struct node *lchild;
 7     struct node *rchild;
 8     char data;
 9 }BiTreeNode, *BiTree;      //这里的*BiTree意思是给 struct node*起了个别名,叫BiTree,所以BiTree为指向节点的指针,
                     并且可以作为指向二叉树根节点的指针(用以指示二叉树)。
11 12 void createBiTree(BiTree &T) //这里加上&意思是传递的参数为指针的引用,括号里面等价于 BiTreeNode* &T 13 {          //这样的意义在于在函数执行过后,传递进来的指针会发生改变(引用的作用),不可以去掉& 14 char c; 15 cin >> c; 16 if(‘#‘ == c) //当遇到#时,令树的根节点为NULL,从而结束该分支的递归 17 T = NULL; 18 else 19 { 20 T = new BiTreeNode; 21 T->data=c; 22 createBiTree(T->lchild); 23 createBiTree(T->rchild); 24 } 25 } 26 27 //前序遍历二叉树并打印出来 28 void preorder(BiTree T) 29 { 30 if(T) 31 { 32 cout<<T->data<<" "; 33 preorder(T->lchild); 34 preorder(T->rchild); 35 } 36 } 37 //中序遍历二叉树并打印出来 38 void midorder(BiTree T) 39 { 40 if(T) 41 { 42 midorder(T->lchild); 43 cout<<T->data<<" "; 44 midorder(T->rchild); 45 } 46 } 47 //后续遍历二叉树并打印出来 48 void postorder(BiTree T) 49 { 50 if(T) 51 { 52 postorder(T->lchild); 53 postorder(T->rchild); 54 cout<<T->data<<" "; 55 } 56 } 57 int main() 58 { 59 BiTree T; //声明一个指向二叉树根节点的指针 60 createBiTree(T); 61 cout<<"二叉树创建完成!"<<endl; 62 cout<<"前序遍历二叉树:"<<endl; 63 preorder(T); 64 cout<<endl; 65 cout<<"中序遍历二叉树:"<<endl; 66 midorder(T); 67 cout<<endl; 68 cout<<"后序遍历二叉树:"<<endl; 69 postorder(T); 70 return 0; 71 }

以上是关于二叉树的建立和遍历的主要内容,如果未能解决你的问题,请参考以下文章

建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历,统计并输出结点个数。

二叉树的遍历方法之层序-先序-中序-后序遍历的简单讲解和代码示例

二叉树的模板 先序建立 二叉树的遍历 深度

Python 二叉树的创建和遍历、重建

二叉树的非递归遍历

二叉树的遍历