二叉树权值最大的叶子节点到权值最小的叶子节点的距离

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。 给定二叉树的根节点root,请返回所求距离。

真是醉了,看漏了叶子节点。

代码:

 1 import java.util.*;
 2
 3 /*
 4 public class TreeNode {
 5     int val = 0;
 6     TreeNode left = null;
 7     TreeNode right = null;
 8     public TreeNode(int val) {
 9         this.val = val;
10     }
11 }*/
12 public class Tree {
13
14     private TreeNode maxNode;
15     private TreeNode minNode;
16
17     private boolean stop = false;
18     private int result;
19
20     public int getDis(TreeNode root) {
21         if(root == null) {
22             return 0;
23         }
24
25         maxNode = root;
26         minNode = root;
27
28         getMaxAndMin(root);
29         getMaxLength(root);
30         return result;
31     }
32
33     private int[] getMaxLength(TreeNode root) {
34
35         if(root == null)
36             return new int[] {-1, -1};
37         if(root == maxNode)
38             return new int[] {0, -1};
39         if(root == minNode)
40             return new int[] {-1, 0};
41
42         int[] left = getMaxLength(root.left);
43         int[] right = getMaxLength(root.right);
44
45         int[] curResult = new int[]{Math.max(left[0], right[0]), Math.max(left[1], right[1])};
46
47         if(curResult[0] != -1)
48             curResult[0]++;
49         if(curResult[1] != -1)
50             curResult[1]++;
51
52         if(!stop && curResult[0] != -1 && curResult[1] != -1) {
53             result = curResult[0] + curResult[1];
54             stop = true;
55         }
56
57         return curResult;
58     }
59
60     private void getMaxAndMin(TreeNode root) {
61
62         if(root == null)
63             return;
64         if(root.left == null && root.right == null) {
65             if(root.val < minNode.val) {
66                 minNode = root;
67             }
68             if(root.val > maxNode.val) {
69                 maxNode = root;
70             }
71         }
72         getMaxAndMin(root.left);
73         getMaxAndMin(root.right);
74
75     }
76 }
时间: 2024-09-29 05:31:47

二叉树权值最大的叶子节点到权值最小的叶子节点的距离的相关文章

求 一棵二叉树中权值最大和最小的叶节点之间的距离

#include <iostream> #include <vector> //结点的数据结构 struct Node { int _data; int _weight; Node* _left; Node* _right; Node(const int& x = 0,int weight=0) :_left(NULL) , _right(NULL) , _data(x) , _weight(weight) {} }; //建树 Node* CreateTree(const

4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点

4.7 Design an algorithm and write code to find the first common ancestor of two nodes in a binary tree. Avoid storing additional nodes in a data structure. NOTE: This is not necessarily a binary search tree. LeetCode上的原题,请参见我之前的博客Lowest Common Ancest

PR值时代成为过去,百度权重值才是王道

如果几年前大家说到网站交换友情链接最大的参考标准是什么,相信做SEO的朋友们都会毫不犹豫的说是谷歌PR值.而在谷歌退出中国**市场,国内搜索引擎百度一家独大的时代,作为一个SEO工作者,如果交换链接还是以PR值为最主要的标准,说他是SEO门外汉也不为过. 可能很多才入行的新手寻找外链的标准还是以PR值为主,但其实PR值的时代早就成为过去.哪怕在还在没有百度权重值没出来的时代,一些懂外链的人,在寻找外链的时候就主要是参考对方网站的"百度收录数""百度外链数"等指标,而

jsp获取dom节点以及节点的文本值和参数属性值

1.获取节点的方式: 1)通过顶层获取节点: document.getElementById("");通过id获取节点的属性值.备注:如果包含多个相同ID的节点,只返回第一个节点 document.getElementsByName("");返回一组相同name元素的数组.然后通过判断属性来确定是否为需要的节点,以radio,CheckBox为例,通过判断check的属性是否为TRUE: document.getElementsByTagName();通过标签名来获

[LeetCode] Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w

javascript_获取iframe框架中元素节点的属性值

1. DOM:文档对象模型 [window 对象] 它是一个顶层对象,而不是另一个对象的属性即浏览器的窗口. [document 对象] 该对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档. 2. JS原生方法获得iframe的window对象 document.getElementById("ifr").contentWindow; 3. 获取iframe框架的思路: (1)找到iframe框架 (2)获取iframe框架的window对象 (3)获取w

树 List Leaves 【用数组模拟了树状结构建树+搜索叶子节点+按照特殊规律输出每个叶子节点】

Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. Input Specification: Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number o

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点).class Solution { public: void CloneList(RandomListNode* pHead){ RandomListNode* cur = pHead; RandomListNode* temp = NULL; while(cur != NULL){ temp = new RandomListNode(0); temp->label = cur->label

LCA最小公共父节点的解题思路

LCA最小公共父节点解法: 1.二叉搜索树: 中序遍历是升序,前序遍历即按序插入建树的序列. 二叉搜索树建树最好用前序+中序,如果用前序建树,最坏情况会退化为线性表,超时. 最近公共祖先甲级: A1143,1151 利用二叉搜索树的性质寻找结点u和v的最低公共祖先(递归解法) 1)如果根结点的值大于max(u,v),说明u和v均在根结点的左子树,则进入根结点的左子结点继续递归 2)如果根结点的值小于min(u,v),说明u和v均在根结点的右子树,则进入根结点的右子结点继续递归 3)剩下的情况就是