关于求二叉树深度的递归算法

来源:百度知道 编辑:UC知道 时间:2024/05/13 10:36:18
题目:二叉树用二叉链表表示,编写求二叉树深度的算法。
答案是:
int height(Bitree T)
{
if (T==NULL) return 0;
u=height(T->lchild);
v=height(T->rchild);
if (u>n) return (u+1)
return (v+1)
}

能不能解释下,这个递归算法,在计算机内部是如何运行的?
u和v在递归的过程中,会自动加1??
递归的过程中,计算机会自动调用堆栈,但是,我的疑问是,调用堆栈的时候,应该不会让u和v自动加1吧?这个算法会不会只是简单的遍历一遍二叉树?

首先你要清楚Bitree的数据结构 左分支T->lchild 和右分支T->rchild 同时叶子节点也有2个分支 都为null

好了 现在我们分析一下这个函数 当所给的参数T是null时,返回0 说明这个树只有一个叶子节点 深度为0 当所给的参数不是null时 函数调用自己看看这个参数的左分支是不是null 如果不是继续调用自己看看左分支的左分支是不是null 直到最后一个的左分支是null 然后看与最后一个左分支并列的右分支是不是null 不是的话自动调用自己 直到是null 然后u(左分支深度)和v(右分支深度)比较 返回 值大的作为深度
第一次到null返回的值为0 然后调用这个函数的上一层函数就得到一个返回值0 比如u=0假设此时v也=0 那么这个上一层函数就会判断(0>0) 然后运行v+1(因为0不大于0所以运行的是v+1) 向他的上一层返回1 以此类推 就返回了树的深度

。。。。

忽忽。完全8懂。我文科。n年米碰这些鸟。进来学习鸟。

基本思路就是如果当前节点还有子节点,则继续访问,递归的找寻子节点直到叶子节点为止。

procedure tree(a:node,depth:integer);
begin
if result<depth then result:=depth;
if a.leftchild<>nil then tree(a.leftchild,depth+1);
if a.rightchild<>nil then tree(a.rightchild,depth+1);
end;

注:result是全局变量,是结果

实际上最好不用什么全局变量
int depth(node *bt)
{ if (bt==NULL)
return 0;
ldepth=depth(bt->left)+1;
rdepth=depth(bt->right)+1;
return max(ldepth,rdepth);
}