1)二叉树的遍历“
先序遍历-->DLR
中序遍历--》LDR
后序遍历”--->LRD
L就是左子树 R就是右子树 D就是根部节点(但是需要牢记 对每一个节点的查看都是 “”“先左后右”)
2)基础补充
3)下面是案例来讲解 怎么遍历:
我们拿这张图举例子:
首先讲解 先序遍历:
就是先根 再左 再右-->A,然后是A的左子树那么就是B所代表的树,但是B还是一个树 所以还是按照DLR,就是B,下面该是B的左子树了,但是B的左子树是空的,所以接下来就是B的右子树,也就是C那棵树,但是C韩式一棵树,还得按照DLR顺序,也就是CDE,然后回去 该A的右子树了,是F代表的子树,但是F还是一棵树,所以 就是F,他的左子树没有,该是G子树了,GH
整个顺序就是:ABCDEFGH
下面就是中序遍历,其实和先序遍历的结果一样,只不过按照的顺序是LDR --->结果最终是BDCEAFHG
后序遍历--->结果是 就是LRD ---->DECBHGFA
4)代码编写:
简单代码展示:
1 #include2 #include 3 #include 4 5 6 using namespace std; 7 //二叉树节点 8 typedef struct node 9 {10 char ch;11 struct node* Lchild;12 struct node* Rchild;13 }NODE,*PNODE;14 15 //下面是遍历16 17 void Recursion(PNODE root)18 {19 if(root==NULL)20 {21 return ;22 23 }24 ////先是先序遍历,先访问根25 //cout< ch< Lchild);28 ////然后遍历他的右子树29 //Recursion(root->Rchild);30 31 ////中序32 //Recursion(root->Lchild);33 //cout< ch< Rchild);38 //后序遍历39 //然后遍历左子树40 Recursion(root->Lchild);41 //然后遍历他的右子树42 Recursion(root->Rchild);43 //根44 cout< ch<
5)获得子节点数目:
1 #include2 #include 3 #include 4 5 6 using namespace std; 7 //二叉树节点 8 typedef struct node 9 {10 char ch;11 struct node* Lchild;12 struct node* Rchild;13 }NODE,*PNODE;14 15 //下面是遍历16 static int lnum=0;17 void Recursion(PNODE root)18 {19 20 if(root==NULL)21 {22 return ;23 24 }25 if(root->Lchild==NULL&&root->Rchild==NULL)26 {27 lnum++;28 }29 ////先是先序遍历,先访问根30 //cout< ch< Lchild);33 ////然后遍历他的右子树34 //Recursion(root->Rchild);35 36 ////中序37 //Recursion(root->Lchild);38 //cout< ch< Rchild);43 //后序遍历44 //然后遍历左子树45 Recursion(root->Lchild);46 //然后遍历他的右子树47 Recursion(root->Rchild);48 //根49 cout< ch<