题目:
假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树高度。
参数:
辅助队 q(存储节点);1对位标记参数L(用来记录当前一层队尾所在位置);指针P(用来指向出队元素);记录高度参数 dept(记录当前高度);
步骤:
- 参数初始化 L=0,deot=0;
- 将结点放入队列q中,
- 判断当前结点是否有孩子结点,有则将孩子结点放入队列q中
- 判断L是否等于队头指针,若等于则dept+1
- 判断队头指针是否小于队尾指针,若小于则继续进行循环,若不小于则循环结束返回当前dept值;
代码实现:
#include <iostream>
using namespace std;
typedef struct TreeNode{
char data;
struct TreeNode *lchrld,*rchild;
int tag;
}TreeNode,*Tree;
//构建树
void creatTree(Tree &t){
char ch;
ch = getchar();
if(ch=='#') t=NULL;
else{
t = (TreeNode *)malloc(sizeof(TreeNode));
t->data = ch;
t->tag=0;
t->lchrld=NULL;
t->rchild = NULL;
creatTree(t->lchrld);
creatTree(t->rchild);
}
}
int dept(Tree t){
if(!t) return 0;
TreeNode *q[10];
int f=-1,r=-1;
int ans=0,L=0;
TreeNode *p;
q[++r] = t;
while (f<r)
{
p=q[++f];
if (p->lchrld) q[++r] = p->lchrld;
if(p->rchild) q[++r] = p->rchild;
if(L==f){
ans++;
L=r;
}
}
return ans;
}
int main(){
Tree t;
creatTree(t);
cout<<dept(t);
return 0;
}