100.Same Tree

題目連接https://leetcode.com/problems/same-tree/description/node

題目大意:給出兩棵二叉樹,判斷這兩顆二叉樹是否徹底相同。ide

法一:利用層序遍歷,兩個隊列分別遍歷兩顆樹,將每一個結點都放進隊列中(不管是否爲null),而後再依次進行判斷,代碼以下:spa

 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                     queueQ.offer(nodeQ.left);
21                     queueQ.offer(nodeQ.right);
22                 }
23             }
24         }
25         if(!queueP.isEmpty() || !queueQ.isEmpty()) {
26             return false;
27         }
28         return flag;
29     }
View Code

法二:利用遞歸直接判斷是否相同,若兩個結點都爲null,則返回true;若一個結點爲null,則返回false;不然判斷值是否相等,以及其左右子樹是否相同,代碼以下:code

 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
相關文章
相關標籤/搜索