在Java的面試中,判斷兩個二叉樹是否相同是一個常見的算法問題。本文將介紹一道經(jīng)典的Java面試題——判斷兩個二叉樹是否相同,并提供詳細的解析和解題思路。
題目
給定兩個二叉樹,判斷它們是否相同(即結構相同且節(jié)點的值相同)。
解析與解題思路
判斷兩個二叉樹是否相同可以使用遞歸的方式來實現(xiàn)。
- 如果兩個二叉樹都為空,則它們相同,返回true。
- 如果兩個二叉樹中有一個為空而另一個不為空,則它們不相同,返回false。
- 如果兩個二叉樹的根節(jié)點的值不相同,則它們不相同,返回false。
- 否則,遞歸地判斷兩個二叉樹的左子樹和右子樹是否相同。
以下是Java代碼實例:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class SameTree {
public static boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true; // 兩個二叉樹都為空,相同
} else if (p == null || q == null) {
return false; // 一個二叉樹為空,一個二叉樹不為空,不相同
} else if (p.val != q.val) {
return false; // 兩個二叉樹的根節(jié)點值不相同,不相同
} else {
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); // 遞歸判斷左子樹和右子樹是否相同
}
}
public static void main(String[] args) {
/*
* 構造兩個二叉樹:
* 二叉樹1:
* 1
* / \
* 2 3
*
* 二叉樹2:
* 1
* / \
* 2 3
*/
TreeNode p = new TreeNode(1);
p.left = new TreeNode(2);
p.right = new TreeNode(3);
TreeNode q = new TreeNode(1);
q.left = new TreeNode(2);
q.right = new TreeNode(3);
boolean result = isSameTree(p, q);
System.out.println("兩個二叉樹是否相同:" + result);
}
}
輸出結果:
兩個二叉樹是否相同:true
結論
通過遞歸的方式,我們可以判斷兩個二叉樹是否相同。判斷二叉樹相同的條件是:兩個二叉樹的根節(jié)點值相同,并且它們的左子樹和右子樹也相同。掌握了解題思路和實現(xiàn)代碼,我們能夠在面試中更加自信地回答相關問題。
學java,就到java編程獅!