面試題59. 對稱二叉樹
題目描述
請實作一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cGcq5SM3YDO3MTOmdjM4cDOhRDMzYzX2EDNxgTMzIzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
思路:
- 如果兩個結點為空,傳回true
- 如果一個為空,另一個不空,傳回false
- 如果都不空,判斷val是否相等,
- 如果不相等傳回false
- 遞歸判斷
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution
boolean isSymmetrical(TreeNode pRoot) {
if(pRoot == null) {
return true;
}
return core(pRoot.left, pRoot.right);
}
boolean core(TreeNode p1, TreeNode p2) {
if(p1 == null && p2 == null) { // 如果都空,傳回true
return true;
}else if(p1 == null || p2 == null) { // 如果有一個空,傳回false
return false;
}else if(p1.val != p2.val){ // 如果結點的值不相等,傳回false
return false;
}
// 遞歸 p1.left 和 p2.right
// 遞歸 p1.right 和 p2.left
return