题目:
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;
}
}