問題描述:
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 1:
輸入:1 1示例 2:/ \ / \
2 3 2 3
[1,2,3], [1,2,3]輸出:true
輸入:1 1示例 3:/ \
2 2
[1,2], [1,null,2]輸出:false
輸入:1 1老規矩 先來自己的,非遞迴實現,佇列層次遍歷比較/ \ / \
2 1 1 2
[1,2,1], [1,1,2]輸出:false
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
return false;
}queue1.add(p);
queue2.add(q);
while (!queue1.isempty())
treenode node1 = queue1.remove();
treenode node2 = queue2.remove();
if (node1.val != node2.val)
if (node1.left != null && node2.left!=null) elseelse
}if (node1.right != null && node2.right!=null) elseelse}}
if(!queue2.isempty())
return true;
}}
再來乙個大神的遞迴實現,
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution else if (p == null || q == null)
boolean left = issametree(p.left, q.left);
boolean right = issametree(p.right, q.right);
if (!left || !right)
return p.val == q.val;
}}
奇怪的是,大神的遞迴比我寫的非遞迴快,讓我難以接受,後來仔細分析,其實有幾點原因,自身寫的判斷條件有些重複累贅,利用佇列,佇列的操作費時,而且最最最重要的就是演算法所傳遞的例子都是比較「小」的樹,如果樹比較深,非遞迴的優勢就能展現出來了,不過low 還是 我low。 leetcode 相同的樹
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true示例 2 輸入 1 1 2 2 1,2 1,null,2 輸出 false示例 3 輸入 1 1 2 1 1...
leetcode 相同的樹c
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 11 2323 1,2,3 1,2,3 輸出 true示例 2 輸入 11 22 1,2 1,null,2 輸出 false示例 3 輸入 11 2112 1,2,1 1...
LeetCode 第100題 相同的樹
給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true 示例 2 輸入 1 1 2 2 1,2 1,null,2 輸出 false 示例 3 輸入 1 1 2 1...