java二叉树 最大值_java – 在二叉树中查找最大元素

我真的很困惑在二叉树中找到一个元素.

问题:当我们说,搜索二叉树中的元素时,在这种情况下最大值,我们是否假设树已排序?

如果没有,请看下面的代码,我从一本书中得到它,几乎每个在线网址都提示类似的模式

int FindMaxNmb(BinaryTreeNode root)

{

int root_val,left,right,max;

if(root!=null)

{

root_val = root.getData();

//recursion - this is what i dont understand

/*

*

* This code would have made sense if binary tree contained

* sorted elements,like The left subtree of a node contained

* only nodes with keys less than the node's key The right subtree

* of a node contained only nodes with keys greater

* than the node's key.

*

* */

left = FindMaxNmb(root.getLeft());

right = FindMaxNmb(root.getRight());

//Find max nmbr

if(left > right)

{

max = left;

}

else

{

max = right;

}

if(root_val > max)

{

max = root_val;

}

}

return max;

}

我不会遗忘的是:举个例子

left = FindMaxNmb(root.getLeft());这将继续调用,除非它到达最左边的底部叶子然后分配值,同样是getRight()….但这个东西只适用于有2个孩子的最左边的节点…它如何检查剩余的值节点(我假设二叉树没有排序)

我知道我错过了一些非常明显的东西……请帮助!!

最佳答案

Binary Tree和

Binary Search Tree之间的区别在于BST在每个节点及其左/右子节点之间有保证 – 普通BT没有排序.

提供的代码适用于普通二进制树,因为它以depth first方式遍历所有节点. (如果数据是BST,算法只需要找到“最右边”的节点并返回它的值以找到树中的最大值.)

现在,在所示的BT实现中,每个递归函数找到由左或右子节点给出的子树的最大值(子节点是子树的根),并且返回该值.

例如,考虑这个二进制树,在这种情况下不是BST(来自维基百科):

调用堆栈,它通过树的方式工作,将如下所示 – 表示堆栈级别,数字代表节点.

-2

--7 (l)

---2 (l)

---6 (r)

----5 (l)

----11 (r)

--5 (r)

---9 (r)

----4 (l)

堆栈只能在到达终端的情况下“展开” – 这是在计算了左右子树的最大值之后(通过递归到FindMaxNmb).

在放松阶段..

> ..当到达节点11时,没有正确的节点,所以它返回到6

>因为这完成了在右子树(6)中的搜索,它返回到7

>因为这完成了在右子树(7)中的搜索,它返回到2

>因为这完成了在左子树(2)中的搜索,所以输入了右子树(5).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值