該題目用來解決兩棵二叉樹是不是同一顆樹!解決的方式是經過樹的遍從來判斷兩棵樹的節點是不是相等。 java
考慮到效率問題,該題目使用前序遍歷比較好。比較不相等能夠當即返回。 code
1. 採用非遞歸方式遍歷樹。 遞歸
public boolean isSameTree(TreeNode p, TreeNode q) { Stack<TreeNode> first = new Stack<TreeNode>(); Stack<TreeNode> second = new Stack<TreeNode>(); TreeNode fP = p; TreeNode sQ = q; while((fP!=null || !first.isEmpty()) && (sQ!=null || !second.isEmpty())){ if(fP==null || sQ == null){ return fP == sQ; } while(fP!=null && sQ!=null){ if(fP.val != sQ.val){ return false; } first.push(fP); second.push(sQ); fP = fP.left; sQ = sQ.left; } if(!first.isEmpty() && !second.isEmpty()){ fP = first.pop(); sQ = second.pop(); fP = fP.right; sQ = sQ.right; } } if(!first.isEmpty() || !second.isEmpty()){ return false; } return true; }
public boolean isSameTree(TreeNode p, TreeNode q) { if(p == null || q == null){ return p == q; } return (p.val == q.val) && isSameTree(p.left, q.left) && isSameTree(p.right, q.right); }