关于树的编程题

判断两颗二叉树是否相等

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;
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值