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