1. 程式人生 > >100.Same Tree

100.Same Tree

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 == null
) { 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 }
View Code

法二:利用層序遍歷,兩個隊列分別遍歷兩顆樹,將每個結點都放進隊列中(無論是否為null),然後再依次進行判斷,代碼如下:

技術分享
 1     private static boolean isSameTree1(TreeNode p, TreeNode q) {
 2         Queue<TreeNode> queueP = new LinkedList<TreeNode>();
 3         Queue<TreeNode> queueQ = new
LinkedList<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 }
View Code

100.Same Tree