码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的三种遍历方式和实现(先序遍历,中序遍历,后序遍历)

时间:2020-05-23 16:37:39      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:clu   stream   二叉树   类型   block   ima   spl   return   后续遍历   

【先序遍历】DLR:先根再左再右:A->B->C-D->E->F->G->H

  [中序遍历] LDR:先左再根再右:B->D->C->E->A->F->H->G

【后序遍历】LRD:先左再右再中:D->E->C->B->H->G->F->A

 

技术图片

 

图(1)

 

【先序遍历】DLR:先根再左再右:A->B->D->H->I->E->J->C->F->G

  [中序遍历]  LDR:先左再根再右:H->D->I->B->J->E->A->F->C->G

【后序遍历】LRD:先左再右再中:H->I->D->J->E->B->F->G->C->A

 技术图片

 

图(2)

 

 

针对图1的三种c++实现:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 //二叉树节点
 5 struct BinaryNode
 6 {
 7     char ch;
 8     BinaryNode* lchild;
 9     BinaryNode* rchild;
10 };
11 void Recursion(BinaryNode* root);
12 //初始化二叉树
13 void CreateBinaryTree() {
14     BinaryNode node1 = { A,NULL,NULL };
15     BinaryNode node2 = { B,NULL,NULL };
16     BinaryNode node3 = { C,NULL,NULL };
17     BinaryNode node4 = { D,NULL,NULL };
18     BinaryNode node5 = { E,NULL,NULL };
19     BinaryNode node6 = { F,NULL,NULL };
20     BinaryNode node7 = { G,NULL,NULL };
21     BinaryNode node8 = { H,NULL,NULL };
22     //建立节点关系
23     node1.lchild = &node2; 
24     node1.rchild = &node6;
25     node2.rchild = &node3;
26     node3.lchild = &node4; 
27     node3.rchild = &node5;
28     node6.rchild = &node7;
29     node7.lchild = &node8; 
30     Recursion(&node1);
31     cout << endl;
32 }
33 //二叉树遍历
34 void Recursion(BinaryNode* root) {
35     if (!root) return;
36     cout << root->ch <<" ";
37     Recursion(root->lchild);  //此结果为先序遍历,将第36行向下移动1行和2行分别为中序遍历和后续遍历
38     Recursion(root->rchild);
39 }
40 int main() {
41     CreateBinaryTree();
42 }

先序遍历:        

技术图片

 

 

 中序遍历:

技术图片

 

 

 后续遍历:

技术图片

 

 注意:在初始化二叉树函数中不应该使返回类型为BinaryNode* 型 因为返回node1地址时为局部变量,在出这个函数后其地址中的内容会被释放。

 

二叉树的三种遍历方式和实现(先序遍历,中序遍历,后序遍历)

标签:clu   stream   二叉树   类型   block   ima   spl   return   后续遍历   

原文地址:https://www.cnblogs.com/jibisheng/p/12942864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!