0
点赞
收藏
分享

微信扫一扫

二叉树的非递归遍历

cnlinkchina 2022-01-16 阅读 75
数据结构

1.将根节点压入栈中

2.进入循环:只要栈中元素个数大于0,进行循环操作

2.1弹出栈顶元素

2.2如果这个栈顶元素标记为真,输出这个元素并且执行下次循环

2.3如果栈顶元素为假,将节点的标志设为真

2.4将该节点的右子树、左子树、根压入栈中

2.5执行下一次循环

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct BinaryNode
{
char ch;
struct BinaryNode*lChild //左子树节点
struct BinaryNode*rChild//右子树节点
int flag;
};
/*
1.将根节点压入栈中
2.只要栈size>0 执行循环
*/
void nonReursion(struct BinaryNode root)
{
//初始化栈
seqStack myStack=init_SeqStack();
push_SeqStack(myStack,root);//1.将根节点压入栈中
while(size_SeqStack(myStack)>0);//2.只要栈size>0 执行循环
{

}
}
void tset()
{
struct BinaryNode nodeA={'A',NULL,NULL};
struct BinaryNode nodeB={'B',NULL,NULL};
struct BinaryNode nodeC={'C',NULL,NULL};
struct BinaryNode nodeD={'D',NULL,NULL};
struct BinaryNode nodeE={'E',NULL,NULL};
struct BinaryNode nodeF={'F',NULL,NULL};
struct BinaryNode nodeG={'G',NULL,NULL};
struct BinaryNode nodeH={'H',NULL,NULL};
}
//建立节点关系
nodeA.lChild=&nodeB;
nodeA.rChild=&nodeF;
nodeB.rChild=&nodeC;
nodeC.rChild=&nodeE;
nodeC.lChild=&nodeD;
nodeF.rChild=&nodeG;
nodeG.lChild=&nodeH;
//执行非递归遍历
nonReursion(&nodeA);

}



int main()
{
system("puase");
return EXIT_SUCCESS;
}
举报

相关推荐

0 条评论