100.Same Tree
阿新 • • 發佈:2017-09-17
lag view esc aps pre ems sam queue pro
題目鏈接https://leetcode.com/problems/same-tree/description/
題目大意:給出兩棵二叉樹,判斷這兩顆二叉樹是否完全相同。(不知道是不是這個題後臺崩了,一直ca, 但我覺得我的方法是沒問題的,類似於101題)
法一:利用遞歸直接判斷是否相同,若兩個結點都為null,則返回true;若一個結點為null,則返回false;否則判斷值是否相等,以及其左右子樹是否相同,代碼如下:
1 private static boolean isSameTree(TreeNode p, TreeNode q) { 2 if(p == null && q == nullView Code) { 3 return true; 4 } 5 if(p == null || q == null) { 6 return false; 7 } 8 else { 9 if(p.val != q.val) { 10 return false; 11 } 12 else { 13 return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);14 } 15 } 16 }
法二:利用層序遍歷,兩個隊列分別遍歷兩顆樹,將每個結點都放進隊列中(無論是否為null),然後再依次進行判斷,代碼如下:
1 private static boolean isSameTree1(TreeNode p, TreeNode q) { 2 Queue<TreeNode> queueP = new LinkedList<TreeNode>(); 3 Queue<TreeNode> queueQ = newView CodeLinkedList<TreeNode>(); 4 queueP.offer(p); 5 queueQ.offer(q); 6 boolean flag = true; 7 while(!queueP.isEmpty() && !queueQ.isEmpty()) { 8 TreeNode nodeP = queueP.poll(); 9 TreeNode nodeQ = queueQ.poll(); 10 if((nodeP == null && nodeQ != null) || (nodeP != null && nodeQ == null)) { 11 return false; 12 } 13 else if(nodeP != null && nodeQ != null) { 14 if(nodeP.val != nodeQ.val) { 15 return false; 16 } 17 else { 18 queueP.offer(nodeP.left); 19 queueP.offer(nodeP.right); 20 queueP.offer(nodeQ.left); 21 queueP.offer(nodeQ.right); 22 } 23 } 24 } 25 if(!queueP.isEmpty() || !queueQ.isEmpty()) { 26 return false; 27 } 28 return flag; 29 }
100.Same Tree