二叉树结点最远距离
来源:互联网 发布:强力卸载软件 编辑:程序博客网 时间:2024/06/05 04:21
题目
给定二叉树,求取该二叉树多有节点中距离最远的结点相隔的距离
分析
以root为根节点的树上,最大距离求取
情况一:root的左子树上的最大距离
情况二:root的右子树上的最大距离
情况三:root左子树上距离root结点最远的距离,加上root自身这个节点,再加上root右子树上距离root右孩子最远的距离
三个值中最大的即为所求
思路
1、整个过程为后序遍历,在二叉树的每棵子树上指向步骤2
2、假设子树头root,处理root的左子树,得到两个信息,左子树上的最大距离记为LMax1,左子树上距离root左孩子的最远距离记为LMax2。处理root右子树得到右子树上的最大距离记为RMax1,距离root右孩子的最远距离记为RMax2。那么跨root结点情况下的最大距离为LMax2+1+RMax2,这个值与LMax1和RMax1比较,最大值即为所求
3、LMax2+1就是root左子树上距离root最远的点到root的距离
RMax2+1就是root右子树上距离root最远的点到root的距离
两者中最大的一个作为root树上距离root最远的距离返回
4、用返回长度为2的数组的方式,可以做到返回两个值
代码实现
/** * 从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当 * 到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。 * 给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500. */private static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}private static int findLongest(TreeNode root) { // write code here int[] res = new int[1]; return findLongestCore(root, res);}private static int findLongestCore(TreeNode node, int[] res) { if (node == null) { res[0] = 0; return 0; } int LMax = findLongestCore(node.left, res);//当前节点左子树上距离当前结点左孩子的最远距离 int maxLeftChild = res[0];//当前结点左子树上距离当前节点最远的距离(不包括当前节点自身) int RMax = findLongestCore(node.right, res);//当前节点右子树上距离当前结点右孩子的最远距离 int maxRightChild = res[0];//当前结点左子树距离当前节点最远的距离(不包括当前节点自身) res[0] = Math.max(maxLeftChild + 1, maxRightChild + 1);//当前结点的子树距离当前结点的最远距离(包括当前结点) return Math.max(Math.max(LMax, RMax), maxLeftChild + maxRightChild + 1);}
阅读全文
0 0
- 二叉树结点最远距离
- 二叉树中最远的两个结点的距离
- 二叉树的最大路径和与最远结点距离
- 求二叉树最远距离
- 二叉树最远距离问题
- 二叉树节点的最远距离
- 求二叉树中最远的距离
- 计算二叉树中最远节点距离
- 二叉树9:树上最远距离练习题
- 求二叉树中最远两个节点距离
- 计算二叉树的任意两节点的最远距离。
- 二叉树的两节点的最远距离
- 求二叉树两节点的最远距离
- 求一颗二叉树中最远的两个节点的距离
- 查找二叉树最远两个节点的距离
- 二叉树的两个节点之间最远的距离
- 【笔试/面试】—— 二叉树的最远距离
- 求二叉树中两个节点最远的距离
- 不知道什么人这么无聊,盗号了,还删我文章
- 重复注解与类型注解
- 使用 MYSQLBINLOG 来恢复数据
- 限定条件的容器数组排序输出
- TabLayout和ViewPager实现今日头条效果
- 二叉树结点最远距离
- Shell的while命令
- fedora 25 升级更新内核后,开机出现:failed start load kernel modules 的解决;还有更新内核后maya viwePort2.0不能用的问题
- Cheerleaders UVA
- 第一天的探索
- Python 2.7.x 和 3.x 版本的重要区别小结
- log4j与slf4j共存
- 【Unity学习笔记】——使用unity自带寻路系统进行寻路
- android.mk文件