题目:
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.、
题意及分析:给出两棵树,判断两棵树是否完全相同,结构和值都相同。有两种方法,一种是遍历树,对每次的节点做判断,比较复杂;另一种是使用递归,每次对左右子树进行判断。
第一种方法:
/** * 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)||(p!=null&&q==null)) return false; if(p==null&&q==null) return true; Stack<TreeNode> pStack = new Stack<>(); Stack<TreeNode> qStack = new Stack<>(); TreeNode pNode = p; TreeNode qNode = q; pStack.add(pNode); qStack.add(qNode); while(pNode.left!=null||!pStack.empty()){ //对q做和p一样的操作,如果得到的值不一样那么就返回false if(pNode.left!=null){ if(qNode.left!=null){ qNode = qNode.left; qStack.add(qNode); }else{ return false; //结构不相等返回false } pNode = pNode.left; pStack.add(pNode); }else{ if(qNode.left!=null) return false; //如果p屋左子节点而q还有 那么返回false if(qStack.isEmpty()) return false; //结构不相等返回false TreeNode pNow = pStack.pop(); TreeNode qNow = qStack.pop(); if(pNow.val!=qNow.val) return false; //不相等 直接返回false if(pNow.right!=null){ if(qNow.right==null) return false; pNode=pNow.right; qNode=qNow.right; pStack.add(pNode); qStack.add(qNode); }else{ //pNode没有右节点,但是q有,fanhui false if(qNow.right!=null) return false; } } } return true; } }
第二种方法:
/** * 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)||(p!=null&&q==null)) return false; if(p==null&&q==null) return true; if(p.val == q.val) return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); return false; } }