求一个二叉树中任意两个节点间的最大距离, 两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。
2019-03-26 16:19
316 查看
网易有道笔试:
求一个二叉树中任意两个节点间的最大距离,
两个节点的距离的定义是这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1,
和相邻兄弟节点间的距离是2,
优化时间空间复杂度。
思路:
用l_depth和r_depth保存左子树最大高度和右子树最大高度。
res保存以该节点为根节点时的的最大距离,不断向上更新。
class TreeNode { int l_depth; int r_depth; int res; int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class m23_maxDisTree { public static void main(String[] args) { int max=0; TreeNode root = new TreeNode(2); root.left=new TreeNode(3); root.left.left=new TreeNode(3); root.left.left.left=new TreeNode(3); root.left.right=new TreeNode(1); root.left.right.right=new TreeNode(1); System.out.println(maxDis(root)); } public static int maxDis(TreeNode root) { Depth(root); return root.res; } public static int Depth(TreeNode root) { if(root==null) { return 0; } if(root.left!=null) { root.l_depth=Depth(root.left); // 左子树最大高度 root.res=Math.max(root.res,root.left.res); // 更新最大距离 } if(root.right!=null) { root.r_depth=Depth(root.right); // 右子树最大高度 root.res=Math.max(root.res,root.right.res); // 更新最大距离 } int sum=root.l_depth+root.r_depth; // 当路径经过该节点时的距离 root.res=Math.max(root.res, sum); // 更新最大距离 return Math.max(root.l_depth,root.r_depth)+1; //返回该节点高度 } }
相关文章推荐
- 求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,
- 每天学习一算法系列(34)(求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数)
- 【每日面试题】求一个二叉树中任意两个节点间的最大距离
- 求一个二叉树中任意两个节点间的最大距离
- 求一个二叉树中任意两个节点间的最大距离
- 求一个二叉树中任意两个节点间的最大距离
- 二叉树中任意两个节点间的最大距离
- 【100题】第三十九题 二叉树任意两个节点间最大距离和有向图割点
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 二叉树中任意两个节点之间的最大距离
- 任意一棵二叉树中最大距离的两个节点【算法】
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 微软等数据结构+算法面试100题(38)-- 二叉树中任意两个节点间的最大距离
- 二叉树两个节点之间的最大距离
- 【字符串】查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 剑指offer-第五章优化时间和空间效率(两个链表的第一个公共节点)
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- 任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432, 一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,
- 查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)