思路:
firstchild对应lchild
nextsibling对应rchild
【lesson19-3 以孩子兄弟链表为存储结构,请设计递归和非递归算法求树的深度】其他操作和普通二叉树的操作一样
代码:
int getHeight(BTNode *t){//递归算法
if(!t)
return 0;
int hc=getHeight(t->firstchild);
int hs=getHeight(t->nextsibling);
return (hc+1)>hs?hc+1:hs;
}int getHeight_(BTNode *t){//非递归算法,层次遍历思想
BTNode *que[MAXSIZE];
int front=-1,rear=-1;
int level=0,last=0;
rear=(rear+1)%MAXSIZE;
que[rear]=t;
BTNode *p;
while(front!=rear){
front=(front+1)%MAXSIZE;
p=que[front];
if(p->firstchild){
rear=(rear+1)%MAXSIZE;
que[rear]=p->firstchild;
}
if(p->nextsibling){
rear=(rear+1)%MAXSIZE;
que[rear]=p->nextsibling;
}
if(front==last){//最右结点出队
level++;
last=rear;
//当这一层结点都入队后,把rear赋值给last
}
}
return level;
}
测试:
#include
#include
#inc
推荐阅读
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 从头做leetcode|从头做leetcode之leetcode 104 二叉树的最大深度
- 从头做leetcode|从头做leetcode之leetcode 101 对称二叉树
- 从头做leetcode|从头做leetcode之leetcode 103 二叉树的锯齿形层次遍历
- 从头做leetcode|从头做leetcode之leetcode 102 二叉树的层序遍历
- 二叉树|交换二叉树中每个节点的两个子女