A. 求二叉树高度的原理、算法是什么,越详细越好,C语言,谢谢
首先分析二叉树的深度(高度)和它的左、右子树深度之间的关系。从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加
1
。
int
Depth
(BiTree
T
){
//
返回二叉树的深度
if
(
!T
)
depthval
=
0;
else
{
depthLeft
=
Depth(
T->lchild
);
depthRight=
Depth(
T->rchild
);
depthval
=
1
+
(depthLeft
>
depthRight
?
depthLeft
:
depthRight);
}
return
depthval;
}
B. 以二叉树链表作为二叉树的存储结构,怎么编写算法计算返回二叉树的高度
编写方法如下:
C. 二叉树高度的求法
LeetCode - 104. 二叉树的最大深度
例如:
给出二叉树 [3,9,20,null,null,15,7],
返回它的高度 3。
广度优先搜索
算法思想:用队列实现层序遍历,返回最后一层的高度。
深度优先搜索1
算法思想:递归求左右子树高度,较大者 +1。
深度优先搜索2
算法思想:用栈实现前序(或后序)遍历,最大栈长度即为树的高度。
D. C语言求二叉树高度问题
就拿你这个图来算吧
以1为根的树高 = 以2为根的树高 和 以 4为根的树高 的 大者 + 1
以2为根的树高 =以6为根的树高 和 以 7为根的树高 的 大者 + 1
E. 怎么计算二叉树高度
分析二叉树的深度(高度)和它的左、右子树深度之间的关系。从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加 1 。
int Depth (BiTree T ){ // 返回二叉树的深度
if ( !T ) depthval = 0;
else {
depthLeft = Depth( T->lchild );
depthRight= Depth( T->rchild );
depthval = 1 + (depthLeft > depthRight ?
depthLeft : depthRight);
}
return depthval;
}
一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点,则此二叉树为完全二叉树。具有n个结点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉树,至少有2k-1个叶子结点,至多有2k-1个结点。
二叉树的深度是从根节点开始(其深度为1)自顶向下逐层累加的;而二叉树高度是从叶节点开始(其高度为1)自底向上逐层累加的。虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。
F. 求一个二叉树的高度 用递归的方法
如果是结点的定义中有深度这个属性,那么用一个队列就可以了。
队首放节点
队尾取出节点
比如:根节点放入队列
(开始只有这个一个节点在队列中)
然后呢
从队尾取出这个根节点
然后打散
把他的左右孩子放入对首(这时候有2个节点
也就是二叉树的第二层)
之后从队伍里取出这2个节点
打散
之后队伍里应该是
二叉树第三层的4个节点
。。。。。
这样就把二叉树层次遍历了
因为有些节点没有孩子节点
也就是叶子
这个队列中的节点
逐渐会越来越少
最后一个取出队列的节点
的深度也就是二叉树的高度
如果结点定义没有深度,我写了一个方法,请楼主参考。
public
static
int
findlevel(binarynode
root)
{
arraylist
>
result=new
arraylist
>();
linkedlist
list=new
linkedlist
();
list.add(root);
result.add(list);
int
level=0;
while(true)
{
list=new
linkedlist
();
for(int
i=0;i
0)
result.add(list);
else
break;
level++;
}
return
level;
}
其实思路和刚才说的是大同小异的,用一个level来记录二叉树的层次,最底的层次就是他的高度。
每一层都存在单独的list里,这些list再存在一个arraylist里,这样很容易就能知道每一层有哪些结点,如果这些结点有孩子,就把level++,直到某一层没有任何结点有孩子,这时候level就是最后一层了。
G. c语言遍历二叉树,怎么求每个叶节点的高度
遍历的时候带一个变量表示高度,比如你用visit遍历的话就在参数里写个heigth变量,进入子节点的时候让height+1,遇到叶子节点的时候height的值就是其高度