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

树的遍历

时间:2020-02-14 14:33:36      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:三次   span   相同   完全   存储   treenode   树的遍历   node   tree   

树的遍历有3种:先根遍历、中根遍历、后根遍历;

先根遍历:如果该二叉树为空树,则空操作,否则先访问根结点,再先根遍历左子树,最后先根遍历右子树。

1 //该二叉树用二叉链表存储,结点类型BiTreeNode
2 void pre_oder(BiTreeNode *root){
3     if(root!=NULL){
4         cout << root->data;//访问结点(这里是输出结点信息)
5         pre_oder(root->leftchild);//先根遍历左子树
6         pre_oder(root->rightchild);//先根遍历右子树
7     }
8 }

中根遍历:如果该二叉树为空树,则空操作,否则先中根遍历左子树,再访问根结点,最后中根遍历右子树。

 //该二叉树用二叉链表存储,结点类型BiTreeNode
 void in_oder(BiTreeNode *root){
     if(root!=NULL){
         in_oder(root->leftchild);//中根遍历左子树
         cout << root->data;//访问结点(这里是输出结点信息)
         in_oder(root->rightchild);//中根遍历右子树
     }
 }

后根遍历:如果该二叉树为空树,则空操作,否则先后根遍历左子树,再后根遍历右子树,最后访问根结点。

1  //该二叉树用二叉链表存储,结点类型BiTreeNode
2  void back_oder(BiTreeNode *root){
3      if(root!=NULL){
4          back_oder(root->leftchild);//后根遍历左子树
5          back_oder(root->rightchild);//后根遍历右子树
6          cout << root->data;//访问结点(这里是输出结点信息)
7      }
8  }

如果把cout << root->data语句抹去,这三种算法是完全相同的,只是访问结点的时机不同。

每次访问某子树时,都要先经过子树的根,访问完该子树的左子树后又会路过该子树的根,访问完右子树后还会路过根。所以每个节点都会被路过三次。

如果在第一次路过时访问,就是先根遍历,如果是第二次,就是中根遍历,最后一次则是后根遍历。

树的遍历

标签:三次   span   相同   完全   存储   treenode   树的遍历   node   tree   

原文地址:https://www.cnblogs.com/eason66-blog/p/tree_walk.html

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