typedef struct BiTree* Node;
typedef struct BiTree* Tree;
struct BiTree
{
int Element;
Node Left;
Node Right;
bool isFirst; //从下向上出栈过程中,第一次出现在栈顶
};
//先序遍历, 递归
void TraverseTreePreOrder(Tree T)
{
if(T != NULL)
{
cout<<T->Element<<" ";
TraverseTreePreOrder(T->Left);
TraverseTreePreOrder(T->Right);
}
}
//中序遍历, 递归
void TraverseTreeInOrder(Tree T)
{
if(T != NULL)
{
TraverseTreeInOrder(T->Left);
cout<<T->Element<<" ";
TraverseTreeInOrder(T->Right);
}
}
//后序遍历,递归
void TraverseTreePostOrder(Tree T)
{
if(T != NULL)
{
TraverseTreePostOrder(T->Left);
TraverseTreePostOrder(T->Right);
cout<<T->Element<<" ";
}
}
//先序遍历. 非递归
void TraverseTreePreOrder2(Tree T)
{
stack<Node> Stack;
while(T!= NULL && !Stack.empty()) //每进行一次while,都是从左儿子到右儿子
{
while(T != NULL) //一直遍历最左边的节点
{
cout<<T->Element<<" ";
Stack.push(T);
T = T->Left;
}
//如果遍历到底了,就向上一层, 遍历右儿子
T =Stack.top();
T = T->Right;
Stack.pop();
}
}
//中序遍历, 非递归
void TraverseTreeInOrder2(Tree T)
{
stack<Node> Stack;
while(T!= NULL && !Stack.empty())
{
while(T != NULL)
{
Stack.push(T);
T = T->Left;
}
T = Stack.top;
Stack.pop();
cout<<T->Element<<" ";
T = T->Right;
}
}
//后序遍历, 非递归
void TraverseTreePostOrder(Tree T)
{
stack<Node> Stack;
while(T != NULL && !Stack.empty())
{
while(T != NULL)
{
Stack.push(T);
T->isFirst = true; //所有节点在初始入栈时都会在此被设为true.
T = T->Left;
}
T = Stack.top();
//Stack.pop();
if(T->isFirst) //左节点被遍历完,准备向右节点遍历时
{
T->isFirst = false;
//Stack.push(T);
T = T->Right;
}
else //右节点被遍历完,又回到这个节点,准备走向父节点
{
Stack.pop();
cout<<T->Element<<" ";
T = NULL:
}
}
}
二叉树的遍历
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 正文之前 在实习的时候学习环境太差了,今天就结束生产实习啦!所以后面可以回去好好看书了!高兴,特地来发篇排过版的文...