二进制搜索树中的高度函数

时间:2016-02-29 21:32:02

标签: c++ tree binary-search-tree

以下是我用于在BST中查找高度的代码。虽然它工作得很好,但我通过反复试验编写了这段代码。任何人都可以一步一步解释它是如何工作的吗?我们非常感谢代码的干运行示例。

!important

2 个答案:

答案 0 :(得分:0)

我建议您将参数的名称更改为" node",相应地改为其含义以及小写字母。

然后,此代码会立即检查root是否有子节点,否则返回0。

然后递归地从左到右访问树的所有节点,这是正确的。当它到达叶子时,返回的值为0,对于l和r,因此 r 值递增,并继续执行。 当递归结束时,你有树的左右高度减去1(之前叶子数为0),所以增加了1并且你有整个高度。

请注意此方法返回树的高度,但您无法知道哪个叶子是最深的,因为当l和r都返回0时,总是递增r。

答案 1 :(得分:0)

你的getHeight() - 函数是这个

的变种
C:\Files\Source\Repos\applications\core\App01>git svn branch branchName
Copying http://url/svn/company/applications/core/App01/trunk
 at r7071 to http://url/svn/company/applications/core/App01/
branches/branchName...
Found possible branch point: http://url/svn/company/applications/core/App01/trunk => http://url/svn/company/applications/core/App01/branches/branchName, 7071
Found branch parent: (refs/remotes/origin/branchName) f8ba2fd450c30d4812b7549217eae1b2d5c7dd00
Following parent with do_switch
Successfully followed parent
r15037 = 52dd759833fd89c7be03f89093aba38090b3288f (refs/remotes/origin/branchName)

C:\Files\Source\Repos\applications\core\App01>

最重要的是它使用递归意味着函数调用自身(在getHeight()本身内部调用getHeight()) 在您的代码 getHeight()中命名为 height()

树的高度等于递归的深度

函数 getHeight()会在达到二进制搜索树的最低级别时递归调用。递归的深度是递归调用getHeight()的数量(因子)。每次调用 getHeight() 都会将计数器增加1,所以最后计数器的值是二进制搜索树的高度在BST的最低级别,“级别跳跃”的数量由 int getHeight(tree *p) { if (!p) return 0; int left = getHeight(p->left); int right = getHeight(p->right); return max(left, right) +1; } 确定。 这是 getHeight()确定二叉搜索树高度的过程。

请参阅维基百科关于递归的文章https://en.wikipedia.org/wiki/Recursion_(computer_science)

箭头操作符 - >当指针引用结构的成员时使用(在这种情况下,结构'p'是树或其当前的brach point 'left''正确'是传出的分支机构)

要理解的关键点是递归是如何工作的。在物理和数学中,递归类似于自映射自我引用

在函数式编程/ Lambda演算(https://en.wikipedia.org/wiki/Functional_programming)中,递归是唯一使用的编程技术。它与命令式编程相对应。

Alan Turing证明了每个可以用命令式编程编写的程序也可以用函数式编程/ lambda演算(使用递归)编写

相关问题