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

二叉树操作总结

时间:2015-06-18 19:01:43      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

  对于二叉树,有前序、中序、后序三种遍历方法,由于树的定义本身就是递归定义的,故采用递归方法实现三种遍历简洁易懂。若采用非递归访问,则需要使用栈来模拟递归的实现。三种遍历的非递归算法中,前序和后序较容易,而后序相对较难。

  前序遍历 递归 非递归
树的遍历 中序遍历 递归 非递归
后序遍历 递归 非递归
  层次遍历    
计算树高      
 计算结点数      

                      

 

 

 

 

 

  1. 前序遍历【访问顺序:根结点-左孩子-右孩子】

    a> 前序遍历递归实现

1 void PreOrderRecursively(BinaryTreeNode *root)
2 {//递归前序遍历[根,左,右]
3     if(root != NULL)
4     {
5         cout << root->data <<" ";
6         PreOrderRecursively(root->pLeft);
7         PreOrderRecursively(root->pRight);
8     }
9 }

     b> 前序遍历非递归实现

 1 void PreOrder(BinaryTreeNode *root)
 2 {//非递归前序遍历:借助于栈,先将根入栈,只要栈不为空,就弹出一个结点,同时将其右孩子、左孩子入栈。
 3  //                   注意:右子树先入栈,以保证右子树在栈中处于左子树的下面[栈:后进先出]
 4     if(root == NULL)
 5         return;
 6     stack<BinaryTreeNode*> s;
 7     s.push(root);//根入栈
 8 
 9     BinaryTreeNode *temp;
10     while(!s.empty())//栈不为空
11     {
12         temp = s.top();//访问栈顶结点
13         cout << temp->data<<" ";
14         s.pop();//出栈
15         if(temp->pRight)
16             s.push(temp->pRight);
17         if(temp->pLeft)
18             s.push(temp->pLeft);
19     }
20 }

 

 

 

 

参考:http://blog.csdn.net/xiajun07061225/article/details/12760627

     http://blog.csdn.net/hackbuteer1/article/details/6583988

二叉树操作总结

标签:

原文地址:http://www.cnblogs.com/dreamrun/p/4586493.html

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