二叉树的先序遍历,递归实现与循环实现
2014-06-19 19:21
211 查看
二叉树的遍历分为先序遍历,中序遍历,后序遍历。
这三个遍历的递归实现十分简单。
这是我的一篇博文,关于创建树
现在我先说说先序遍历。
先序就是按照最优先顺序,遍历就是沿一定路径经过路径上所有的节点。在二叉树中,以左为先。
为了分离访问的操作,定义
递归实现
源代码:
循环实现
考虑到右节点后于左节点展开,所以我用栈现存放右节点的信息,在存放左节点,然后取栈顶元素重复以上操作,则可以得到先序的遍历序列。
这三个遍历的递归实现十分简单。
这是我的一篇博文,关于创建树
现在我先说说先序遍历。
先序就是按照最优先顺序,遍历就是沿一定路径经过路径上所有的节点。在二叉树中,以左为先。
为了分离访问的操作,定义
typedef void (*PVisitFun)(TreeNode*) ;
void Visit(TreeNode* node) { cout<<node->data; }
递归实现
源代码:
void PreOrderVisitR(TreeNode* root,PVisitFun pvisit) { if(root == NULL) return; pvisit(root); PreOrderVisitR(root->plc,pvisit); PreOrderVisitR(root->prc,pvisit); }
循环实现
考虑到右节点后于左节点展开,所以我用栈现存放右节点的信息,在存放左节点,然后取栈顶元素重复以上操作,则可以得到先序的遍历序列。
void PreOrderVisitI(TreeNode* root, PVisitFun pvisit) { stack<TreeNode*> visitStack; visitStack.push(root); TreeNode* pcurt = NULL; while ( !visitStack.empty() ) { pcurt = visitStack.top(); visitStack.pop(); cout<<pcurt->data; if (pcurt->prc != NULL) { visitStack.push(pcurt->prc); } if (pcurt->plc != NULL) { visitStack.push(pcurt->plc); } } }
相关文章推荐
- 14.二叉树 中序遍历 先序遍历 的非递归实现 以及 二叉树 的复制 及判断二叉树的等价性
- [原][二叉树专题]:先序遍历二叉树的递归实现与非递归实现
- 利用非递归方法实现二叉树的先序遍历
- 二叉树三种遍历方式的递归和循环实现
- 二叉树先序遍历 -- 递归和非递归实现
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法
- 二叉树(1)----先序遍历(前序遍历),递归和非递归方式实现
- 二叉树的创建(先序创建的)及先序遍历 中序遍历 后序遍历的递归和非递归实现
- 二叉树先序遍历非递归方法的两种实现
- leetcode笔试题二叉树的前序、中序、后序遍历的递归和循环c++实现
- 不用递归——用栈——实现先序遍历二叉树的算法
- 二叉树的先序遍历、中序遍历、后序遍历、层次遍历的递归实现
- 二叉树的中序遍历,递归实现与循环实现
- 算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现
- 利用非递归方法实现二叉树的先序遍历
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 二叉树镜像,递归和循环实现
- 二叉树后续遍历的非递归循环C# 实现
- 数据结构 利用循环队列层次遍历一棵二叉树 递归实现
- 【LeetCode】144. Binary Tree Preorder Traversal 二叉树先序遍历的非递归实现