相同二叉樹和鏡面二叉樹問題

相同二叉樹和鏡面二叉樹問題

作者:Grey

原文地址:

博客園:相同二叉樹和鏡面二叉樹問題

CSDN:相同二叉樹和鏡面二叉樹問題

判斷兩棵樹是否是相同的樹

題目描述見:LeetCode 100. Same Tree

即:如果兩個樹在結構上相同,並且節點具有相同的值,則認爲它們是相同的。

比如:

image

兩個樹結構完全一致,對應位置上的值也一致,即爲相同的樹,以下兩種情況都不是相同的樹:

image

image

思路也很簡單,首先,兩棵空樹是相同的樹,只有一棵樹是空樹,則一定不是相同的樹,即

if (p == null || q == null) {
    // 兩個同時爲空才表示 same tree
    return q == null && p == null;
}

除此以外,兩棵樹的頭節點的值相等,纔有可能是相同的樹

p.val == q.val

而且,還需要滿足,p 的左子樹和 q 的左子樹是相同的樹且 p 的右子樹和 q 的右子樹是相同的樹,這幾個條件同時滿足,纔是相同的樹,以上條件整合一下,即:

return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);

完整代碼爲

public boolean isSameTree(TreeNode p, TreeNode q) {
 if (p == null || q == null) {
  // 兩個樹同時爲空才表示 same tree
  return q == null && p == null;
 }
 return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}

鏡面二叉樹問題

題目描述見:LeetCode 101. Symmetric Tree

即:判斷一個樹是否軸對稱。

比如這個二叉樹,就是軸對稱的:

image

以下這個二叉樹,就不是軸對稱的,

image

本題的思路如下:

首先,空樹一定是鏡面二叉樹

if (null == root) {
    return true;
}

此外,左右子樹同時爲空的時候,是鏡面二叉樹

if (root.left == null || root.right == null) {
 return root.left == null && root.right == null;
}

接下來定義遞歸函數

boolean isSymmetric(TreeNode left, TreeNode right)

遞歸含義是:判斷 left 和 right 這兩棵樹是否是鏡面對稱。

base case 是

if (left == null || right == null) {
// 兩棵樹同時爲空才鏡面對稱
 return left == null && right == null;
}

普遍情況,首先要滿足,left 樹頭節點的值和 right 樹頭節點的值一樣,然後是 left 的左子樹和 right 的右子樹鏡面對稱,且 left 樹的右子樹和 right 樹的左子樹鏡面對稱,三個條件同時滿足,left 和 right 才鏡面對稱

public boolean isSymmetric(TreeNode left, TreeNode right) {
 if (left == null || right == null) {
  return left == null && right == null;
 }
 // left.val == right.val
 return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}

主函數直接調用這個遞歸方法:

public boolean isSymmetric(TreeNode root) {
 if (null == root) {
  return true;
 }
 if (root.left == null || root.right == null) {
  return root.left == null && root.right == null;
 }
 return root.left.val == root.right.val && isSymmetric(root.left, root.right);
}

更多

算法和數據結構學習筆記

算法和數據結構學習代碼

參考資料

算法和數據結構體系班-左程雲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章