判断两颗二叉树是否相等
public boolean isSameTree(TreeNode tree1,TreeNode tree2){
if (tree1==null&&tree2==null){//若两棵树均为空
return true;
}
else if (tree1==null||tree2==null){//若两棵树有一方为空
return false;
}
if(tree1!=null&&tree2!=null){
if(tree1.val!=tree2.val){
return false;
}
else {
return isSameTree(tree1.left,tree2.left)&&isSameTree(tree1.right,tree2.right);
}
}
return false;
}
---------------------
作者:simpleyellow
来源:CSDN
原文:https://blog.csdn.net/yanyumin52/article/details/79783576
版权声明:本文为博主原创文章,转载请附上博文链接!
二叉树的镜像
public void Mirror(TreeNode root) {
if(root==null){
return;}
if(root.left==null&&root.right==null){
return;
}
TreeNode t=null;
t=root.left;
root.left=root.right;
root.right=t;
Mirror(root.left);
Mirror(root.right);
}
Symmetric Tree(是否为镜像树)
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null)
return true;
return isSameTree(root.left,root.right);//比较左右子树是否为镜像
}
public boolean isSameTree(TreeNode root1, TreeNode root2) {
if (root1 == null && root2 == null) {
return true;
}
if ((root1 == null && root2 != null) || (root1 != null && root2 == null)) {
return false;
}
if (root1.val != root2.val) {//判断每个节点的值是否相等,如果去除此判断,则判断两个二叉树是否结构相等
return false;
}
return isSameTree(root1.left, root2.right) && isSameTree(root1.right, root2.left);
}
}
Balanced Binary Tree(是否为二叉平衡树)
class Solution {
public boolean isBalanced(TreeNode root) {
if(root==null) return true;
if(Math.abs(maxDepth(root.left)-maxDepth(root.right))>1) return false;
return isBalanced(root.left)&&isBalanced(root.right);
}
public int maxDepth(TreeNode root) {
if(root==null)
return 0;
int l=maxDepth(root.left);
int r=maxDepth(root.right);
return (l>r)? l+1:r+1;
}
}
Minimum Depth of Binary Tree
public int minDepth(TreeNode root) {
if (root == null) return 0;
if (root.left == null && root.right == null) return 1;
int left, right;
if (root.left != null) left = minDepth(root.left);
else left = Integer.MAX_VALUE; //不存在设为最大,逆向思维
if (root.right != null) right = minDepth(root.right);
else right = Integer.MAX_VALUE;
return Math.min(left, right) + 1;
}
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>();
private ArrayList<Integer> list = new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root == null) return listAll;
list.add(root.val);
target -= root.val;
if(target == 0 && root.left == null && root.right == null)
listAll.add(new ArrayList<Integer>(list));
FindPath(root.left, target);
FindPath(root.right, target);
list.remove(list.size()-1);
return listAll;
}