二叉树求最大最小权值问题的面试题

有一棵二叉树,树上每个点标有权值,权值各不相同,给定二叉树的根节点为root,请找出权值最大的节点与权值最小的节点; 假设父子节点距离为1,请计算权值最大节点与权值最小节点之间的距离(提示:可分别找出根节点到该两点间的路径,再减去两者从根节点开始的共同路径距离)
在很多面试中也有这样类似的问题,自己本身基础很弱,将学过的思路整理出来,方便自己以后的学习。话不多说,上思路。

思路:
先求最大最小叶子节点,再求两节点的LCA(最近公共祖先),求两节点到LCA距离。

首先得先明白如何求LCA(LCA属于比较经典的一类考点,定要掌握)。

概念,最近祖先节点: 最近祖先节点就是从根节点遍历到给定节点时的最后一个相同节点。

LCA思路:
如果给定Root是NULL,即空树,则返回的公共节点自然就是NULL;
情况一:如果左子树查找出的公共节点是NULL,则表明从左子树根节点开始到左子树的所有叶子节点等所有节点中,没有找到两个节点中的任何一个,这就说明,这两个节点不在左子树上,不在左子树,则必定在右子树上;
情况二:如果右子树查找的公共节点是NULL,说明在右子树中无法找到任何一个节点,则两个节点必定在左子树上;
情况三: 如果左右子树查找的公共节点都不是NULL,说明左右子树中各包含一个节点,则当前节点Root就是最低公共节点,返回就可以了。
public TreeNode GetLastCommonParent( TreeNode Root, TreeNode pNode1, TreeNode pNode2){
if( Root== null ) //说明是空树,不用查找了,也就找不到对应节点,则返回NULL
return null;
if( Root== pNode1 || pRoot == pNode2 )//说明在当前子树的根节点上找到两个节点之一
return Root;
TreeNode LeftNode = GetLastCommonParent( Root.left, pNode1, pNode2);//左子树中的查找两个节点并返回查找结果
Tre

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值