Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1
/ \
2 2
\ \
3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
判断一个二叉树是否是镜像的。使用栈处理数据,注意左右节点的入栈顺序。
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null)
return true;
Stack stack=new Stack();
stack.push(root.left);
stack.push(root.right);
while(!stack.isEmpty()){
TreeNode node1=stack.pop();
TreeNode node2=stack.pop();
if(node1==null && node2==null)
continue;
if(node1==null || node2==null || node1.val!=node2.val){
return false;
}
stack.push(node1.left);
stack.push(node2.right);
stack.push(node1.right);
stack.push(node2.left);
}
return true;
}
}
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
层序遍历二叉树,每一层节点的值分别放在一个list中,所有list放在一个大list中。
思想:
* 深度优先搜索,按层遍历,每层的元素分别放在一个list中,最后将多有list汇总到一个大list中。
* 核心,使用队列;
* 第一层先入队列,在遍历第一层元素的同时,将第二层入队列,第一层并出队列,第一层出去完之后,只剩下第二层数据了。
* 第二层开始遍历,第二层遍历的过程中,将第三层入队列。。。依次类推,直至最后一层入队列,遍历完最后一层,队列就空了。循环结束。
public static List> levelOrder(TreeNode root) {
Queue queue=new LinkedList();
List> list=new LinkedList>();
if(root==null)
return list;
queue.offer(root);
while(!queue.isEmpty()){
int len=queue.size();
List subList=new LinkedList();
for(int i=0;i
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees ofevery node never differ by more than 1.
public static boolean isBalanced(TreeNode root) {
if(root==null)
return true;
if(Math.abs(height(root.left)-height(root.right))<=1){
return (isBalanced(root.left)&&(isBalanced(root.right)));
}
return false;
}
private static int height(TreeNode root) {
// TODO Auto-generated method stub
if(root==null){
return 0;
}
int left=height(root.left);
int right=height(root.right);
return (Math.max(left, right)+1);
}
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
public int minDepth(TreeNode root) {
if(root==null)
return 0;
if(root.left==null)
return minDepth(root.right)+1;
if(root.right==null)
return minDepth(root.left)+1;
return Math.min(minDepth(root.left), minDepth(root.right))+1;
}
Total Accepted: 136461
Total Submissions: 415931
Difficulty: Easy
Contributors: Admin
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum = 22
,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2
which sum is 22.
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null)
return false;
if(root.left==null && root.right==null && sum-root.val==0)
return true;
return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);
}
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1
/ \
2 3
\
5
All root-to-leaf paths are:
["1->2->5", "1->3"]
找到二叉树中根节点到叶子节点的所有路径。
public List binaryTreePaths(TreeNode root) {
List list=new ArrayList();
if(root!=null) searchBT(root,"",list);
return list;
}
private static void searchBT(TreeNode root, String path, List list) {
// TODO Auto-generated method stub
if(root.left==null && root.right==null)
list.add(path+root.val);
if(root.left!=null)
searchBT(root.left, path+root.val+"->", list);
if(root.right!=null)
searchBT(root.right, path+root.val+"->", list);
}