標籤:sem 完全 bsp logs for empty val ide amp
題目:
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; }}
[LeetCode] 100. Same Tree Java