基于栈来实现二叉树的先根遍历
来源:互联网 发布:好听的网络作家笔名 编辑:程序博客网 时间:2024/05/31 20:51
当年在淘宝最后一面的时候被问过这个问题,当时思路混乱,答的不好。
#include<iostream>
#include<stack>
using namespace std;
struct Node
{
Node(char ch)
{
c = ch;
left = NULL;
right = NULL;
}
char c;
Node* left;
Node* right;
};
// 由于栈是先进后出,如果先把右子树压栈,再把左子树压栈,由于左子树在栈顶,访问完之后,又会去先压该左子树的右子树,以及该左子树的左子树,以此类推
#include<stack>
using namespace std;
struct Node
{
Node(char ch)
{
c = ch;
left = NULL;
right = NULL;
}
char c;
Node* left;
Node* right;
};
// 由于栈是先进后出,如果先把右子树压栈,再把左子树压栈,由于左子树在栈顶,访问完之后,又会去先压该左子树的右子树,以及该左子树的左子树,以此类推
// 这样就达到了一种用栈模拟递归的效果。
void preOrder(Node* root)
{
if(!root)
{
return;
}
stack<Node*> nodeStack;
nodeStack.push(root);
while(!nodeStack.empty())
{
Node* pNode = nodeStack.top();
cout << pNode->c;
nodeStack.pop();
if(pNode->right)
{
nodeStack.push(pNode->right);
}
if(pNode->left)
{
nodeStack.push(pNode->left);
}
}
}
int main(int argc, char** argv)
{
Node* pNodeA = new Node('A');
Node* pNodeB = new Node('B');
Node* pNodeC = new Node('C');
Node* pNodeD = new Node('D');
Node* pNodeE = new Node('E');
Node* pNodeF = new Node('F');
pNodeB->left = pNodeD;
pNodeC->left = pNodeE;
pNodeC->right = pNodeF;
pNodeA->left = pNodeB;
pNodeA->right = pNodeC;
preOrder(pNodeA);
}
0 0
- 基于栈来实现二叉树的先根遍历
- 二叉树的先根遍历
- 如何实现二叉树的非递归先序遍历
- 二叉树的先序遍历非递归实现方法
- 二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
- 栈实现二叉树非递归先序遍历
- 二叉树实现先序遍历(迭代版)
- 数组实现根据二叉树的先序遍历和中序遍历构造二叉树
- 二叉树高度,栈实现二叉树的先序,中序,后序遍历的非递归遍历,二叉树层次遍历
- 利用栈实现的二叉树的先、中、后序遍历
- 基于栈和队列实现二叉树的遍历
- C实现二叉树的先序遍历,中序遍历,后序遍历
- c语言实现二叉树的先序遍历,中序遍历,后序遍历
- 二叉树T 的先序遍历、中序遍历、后序遍历(递归实现)
- java实现二叉树的先序遍历,中序遍历,后序遍历
- 实现二叉树的先序遍历、中序遍历、后序遍历
- [二叉树专题]:先序遍历二叉树的递归实现与非递归实现
- 带有层号的先根遍历树存储基于plsql的代码实现
- P51第18题
- Linux LVM 分区扩容与多磁盘分区合并处理
- Shiro异常汇总
- linux 多线程
- 内部排序之五:基数排序
- 基于栈来实现二叉树的先根遍历
- Simplify Path--LeetCode
- 黑马程序员--IO(字符流、字节流)
- /proc 目录调试信息
- 接口与抽象类的辨析补充
- 拍照、从相册选图并对图片进行裁剪
- 妖哲开始搞前端1——利器!Bootstrap
- DeepID1 分析
- lucene的Filter简单用法打印索引文档信息