网易 二叉树
来源:互联网 发布:c语言的三种基本结构 编辑:程序博客网 时间:2024/04/29 07:07
有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。
给定二叉树的根节点root,请返回所求距离。
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Tree { TreeNode maxNode = new TreeNode(Integer.MIN_VALUE); TreeNode minNode = new TreeNode(Integer.MAX_VALUE); int steps; public int getDis(TreeNode root) { getMaxMinNode(root); TreeNode father = lca(root, minNode, maxNode); steps = 0; getSteps(father, maxNode, 0); int maxSteps = steps; steps = 0; getSteps(father, minNode, 0); int minSteps = steps; return maxSteps + minSteps; } public void getMaxMinNode(TreeNode root) { if (root == null) { return; } if (root.left == null && root.right == null) { if (root.val > maxNode.val) { maxNode = root; } if (root.val < minNode.val) { minNode = root; } } getMaxMinNode(root.left); getMaxMinNode(root.right); } public void getSteps(TreeNode root, TreeNode node, int level) { if (root == null) { return; } if (root == node) { steps = level; return; } getSteps(root.left, node, level + 1); getSteps(root.right, node, level + 1); } public TreeNode lca(TreeNode root, TreeNode node1, TreeNode node2) { if (root == null) { return root; } boolean exist1 = hasNode(root.left, node1); boolean exist2 = hasNode(root.left, node2); if (exist1 && exist2) { return lca(root.left, node1, node2); } exist1 = hasNode(root.right, node1); exist2 = hasNode(root.right, node2); if (exist1 && exist2) { return lca(root.right, node1, node2); } return root; } public boolean hasNode(TreeNode root, TreeNode node) { if (root == null || node == null) { return false; } if (root == node) { return true; } return hasNode(root.left, node) || hasNode(root.right, node); }}
0 0
- 网易 二叉树
- 网易笔试题:二叉树
- 网易实习生笔试题:二叉树
- 网易实习生笔试编程题 二叉树
- 网易实习生真题(二叉树)
- 网易2016年实习生笔试题-二叉树
- 二叉树 网易2016实习研发工程师编程题
- 二叉树遍历——转载于网易博客summer
- 【数据结构】网易2012校园招聘题目--平衡二叉树的插入问题
- 网易云课堂数据结构——二叉搜索树(2015.5.9-10)
- 网易——求二叉树最大叶子节点到最小叶子节点的距离
- 网易16年研发实习生笔试题 - 二叉树节点距离
- 网易
- 网易
- 网易
- 网易
- 二叉树、二叉堆
- 算法题 13:二叉堆(网易2016实习研发工程师)
- Java工厂设计模式
- Android实现Service后台下载Notification进度条
- python中的requests用法简介
- 关于php-fpm方式和apache配合使用的几点记录
- 剑指offer系列之28:最小的k个数
- 网易 二叉树
- RxAndroid的初体验
- 项目整理--Echarts前端后台的贯通写法
- GLSL预定义变量
- 将word转换成pdf文本文件的转换方法
- 安装mongodb数据库
- hihoCoder:403 Forbidden
- UML类图简介
- ubuntu 14.04 Ext4 rm -rf 文件恢复