树的遍历
来源:互联网 发布:2017淘宝千人千面刷法 编辑:程序博客网 时间:2024/04/27 21:46
递归:
1.先序
void PreOrder(T)
{
if T != NULL
Print T
PreOrder(T.lchild)
PreOrder(T.rchild)
}
2.中序
void InOrder(T)
{
if T != NULL
InOrder(T.lchild)
Print T
InOrder(T.rchild)
}
3.后序
void PostOrder(T)
{
if T != NULL
PostOrder(T.lchild)
PostOrder(T.rchild)
Print T
}
非递归:
1.先序:
void PreOrder(T)
{
t = T
Stack stack
while t != NULL || !stack.empty()
if t != NULL
print t
Push(stack, t)
t = t.lchild
else
t = Pop(stack)
t = t.rchild
}
2.中序
void InOrder(T)
{
t = T
Stack stack
while t != NULL || !stack.empty()
if t != NULL
Push(stack, t)
t = tlchild
else
t = Pop()
print t
t = t.rchild
}
3.后序
后序遍历由于遍历父节点是在遍历子节点之后,而且左节点和右节点遍历后的行为不一样,
因此需要用变量来记录前一次访问的节点,根据前一次节点和现节点的关系确定操作。http://blog.csdn.net/hackbuteer1/article/details/6583988
void PostOrder(T)
{
if T == NULL
return;
Stack stack
Push(stack, T)
while(!stack.empty())
{
cur = s.top()
if (pre == NULL || pre->lchild == cur || pre->rchild == cur)
{
if (cur->lchild != NULL)
Push(stack, cur->lchild)
else if (cur->rchild != NULL)
Push(stack, cur->rchild)
}
else if (cur->lchild == pre)
{
if (cur->rchild != NULL)
Push(stack, cur->rchild)
}
else
{
print cur
s.pop()
}
pre = cur
}
}
不用栈非递归中序遍历(需要父节点)while(t != null){ while(t->left && p != t->left && p != t->right) {<span style="white-space:pre"></span>p = t;<span style="white-space:pre"></span>t = t->left; } if(p != t->right) { <span style="white-space:pre"></span>print t;<span style="white-space:pre"></span>if(t->right)<span style="white-space:pre"></span>{<span style="white-space:pre"></span> p = t;<span style="white-space:pre"></span> t = t->right;<span style="white-space:pre"></span>} } else {<span style="white-space:pre"></span>p = t;<span style="white-space:pre"></span>t = t->parent; } }
- 二叉树的遍历(层遍历和深度遍历)
- 二叉树的前序中序后序遍历,非递归遍历 层次遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 二叉树遍历-----前序后序迭代遍历的新思路
- 二叉树的遍历-按层次遍历
- 二叉树的遍历(递归遍历)
- 二叉树的遍历-层次遍历
- 树的遍历
- 六、 树的遍历
- 二叉树的遍历
- haffman树的遍历
- 二叉树的遍历
- 树的各种遍历
- 树的遍历
- 二叉树的遍历
- C++树的遍历
- Java树的遍历
- 树的简单遍历
- 性能知识
- Popup Window
- poj 3279 Fliptile(二进制暴力)
- freemarker Macro使用小记 分页
- 华为小米的战争:目前远未到决定输赢时刻
- 树的遍历
- spring整合hibernate时报的错误
- iOS之UITableView的使用
- Linux Shell脚本的字符串截取
- iphone6的分辨率及适配方法
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-Web部分
- SQL Select语句完整的执行顺序
- 请谈一下你对网页标准和标准制定机构重要性的理解。
- Execl导出示例,关于SpringMVC