C语言,用非递归的算法(链栈)计算二叉树的结点数。
发布网友
发布时间:2022-05-05 13:25
我来回答
共1个回答
热心网友
时间:2022-06-27 13:40
#包括
使用命名空间std;
定义MAX 100
类二叉树
{
char数据;
二叉树* lchild;
二叉树* rchild;
};的
二叉树* creatree()/ /非递归创建一棵二叉树
{ />字符CH;
诠释前面= 1,后= 0; / /初始化队列
B树*根*,S * Q [MAX];
根= NULL;
cout <<“请'@'表示'空','#',”结束“,他的贡献层:”<< endl;
CH = getchar函数();
而因素(ch! = '#')
{
= NULL,/ /读取的第一个假设是空的节点_at_
(ch! =“_at_')
{
新的二叉树;
- >数据= CH;
- > lchild = NULL;
- > rchild = NULL;
}
后端的团队+ +; / /指针递增
Q [后] =;
如果(后部== 1)
根= / /根
其他
{
(S && Q [前方])/ /当前节点的父节点是不是空的节点
(后部%2 == 0)
Q [前] - > lchild;
其他
Q [前] - > rchild =;
(背面%2 == 1)
前+ +;
} BR /> CH = getchar函数()/ /读出下一个节点的值
}
返回根;
}
无效后序(B树* BT)
二叉树* p = BT,*栈[MAX] ;/ / p表示当前节点协议栈栈[]
INT标记用于存储节点[MAX];
顶部= -1 ;
{
在while(p! = NULL)/ /第一个处理器节点的左子节点都留给孩子,反过来堆栈
{
>栈[+ +顶部] = P;
[顶] = 0;
P = P-> lchild;
}
(TOP> = 0)/ /所有留守儿童处理
{
(标记[顶])/ /如果当前节点的右子尚未被访问
{
P =堆栈[顶]; /输出的协议栈节点的顶部,但消失在堆栈中,因为要输出他们的孩子的第一个节点
p = P-> rchild; / /右子节点的处理
标签[顶] = 1; / /在被访问的的堆栈存储节点的右子榜首的位置,下一次你把它退栈直接输出
}
其他
{
*<数据/ /在栈的栈顶元素,输出的节点,节点p指向NULL
}
}}而(( P = NULL)| |(> = 0));
}
廉政的main()
{
二叉树BT;
BT = creatree();
*<<'\ n'<<“后序”;
后序(BT);
*<< endl;
系统(“暂停“);
返回0;
}