leetcode100题< Same Tree >(java)

题目

很简单,就是找出两个相同的树

我首先就想到了树的遍历

code1

树的深度优先搜索
先声明一个栈,把头结点放进去。
然后把栈里第一个结点pop出来,接着把头结点的子节点push进去,
然后把栈里面的第一个结点pop出来,把他的子节点push进去。
直到栈为空。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        Stack<TreeNode> stack1=new Stack<TreeNode>();
        Stack<TreeNode> stack2=new Stack<TreeNode>();

        if (p==null&&q==null){
            return true;
        }
        if(p==null||q==null){
            return false;
        }
        stack1.push(p);
        stack2.push(q);
        while((!stack1.isEmpty())&&(!stack2.isEmpty())){
            TreeNode node1=stack1.pop();
            TreeNode node2=stack2.pop();
            if (node1.val!=node2.val){
                return false;
            }
            if(node1.left!=null&&node2.left!=null){
            stack1.push(node1.left);
            stack2.push(node2.left);
            }
            else if(node1.left==null&&node2.left==null);
            else{return false;}

            if(node1.right!=null&&node2.right!=null){
            stack1.push(node1.right);
            stack2.push(node2.right);
            }
            else if(node1.right==null&&node2.right==null);
            else{return false;}
        }
        if (stack1.isEmpty()&&stack2.isEmpty()){
            return true;
        }
        else return false;
    }
}

这个代码虽然能过,但是写得冗长,并且边界条件多。

code2

递归即可。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p==null&&q==null){
            return true;
        }
        else if(p!=null&q!=null){
         if(p.val!=q.val){
            return false;
         }

         }
         else return false;



        return (isSameTree(p.left,q.left))&&(isSameTree(p.right,q.right));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值