题目:path-sum
例如:
给定二叉树头结点root 和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, 因为从头结点到叶子结点的一条路径5->4->11->2和为 22.
代码如下:
import java.util.*;
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null)
return false;
Stack<TreeNode> stack=new Stack();
return help(root,0,sum,stack);
}
public boolean help(TreeNode root,int cur,int sum,Stack<TreeNode> stack)
{
cur+=root.val;
stack.push(root);
if(root.left == null&&root.right == null)
{
if(cur == sum)
return true;
}
boolean result=false;
if(root.left!=null)
result=help(root.left,cur,sum,stack);
if(result == false&&root.right!=null)
result=help(root.right,cur,sum,stack);
cur-=root.val;
stack.pop();
return result;
}
}
题目:求二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
public class Solution {
public int TreeDepth(TreeNode root)
{
if(root == null)
return 0;
int[] count=new int[1];
help(root,0,count);
return count[0];
}
public void help(TreeNode root,int cur,int[] count)
{
if(root == null)
return;
cur+=1;
if(root.left == null&&root.right == null)
{
count[0]=Math.max(count[0],cur);
return;
}
help(root.left,cur,count);
help(root.right,cur,count);
}
}