最近智商一直不在线。。
本周leetcode竞赛,带来两题数据结构体TREE相关
543. Diameter of Binary Tree
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longestpath between any two nodes in a tree. This path may or may not pass through the root.
Example:
Given a binary tree
1 / \ 2 3 / \ 4 5
Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].
Note: The length of path between two nodes is represented by the number of edges between them.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int diameterOfBinaryTree(TreeNode root) {
if(root==null){
return 0;
}
help(root,0);
preorder(root);
return max;
}
int max=0;
private int help(TreeNode root,int deep){
if(root==null){
return deep;
}
deep++;
int leftdeep=help(root.left,deep);
int rightdeep=help(root.right,deep);
root.val=leftdeep+rightdeep-2*deep;
return Math.max(rightdeep,leftdeep);
}
private void preorder(TreeNode root){
if(root==null){
return;
}
max=Math.max(max,root.val);
preorder(root.left);
preorder(root.right);
}
}
538. Convert BST to Greater Tree
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.
Example:
Input: The root of a Binary Search Tree like this: 5 / \ 2 13 Output: The root of a Greater Tree like this: 18 / \ 20 13
public class Solution {
public TreeNode convertBST(TreeNode root) {
laterorder(root);
return root;
}
int sum=0;
private void laterorder(TreeNode root){
if(root==null){
return ;
}
laterorder(root.right);
int temp=root.val+sum;
root.val=root.val+sum;
sum=temp;
laterorder(root.left);
}
}