1. 程式人生 > 其它 >【Leetcode】NO.101 對稱二叉樹(C++&Python)[二叉樹]

【Leetcode】NO.101 對稱二叉樹(C++&Python)[二叉樹]

二叉樹第九彈!!!

題目 101. 對稱二叉樹

給定一個二叉樹,檢查它是否是映象對稱的。

思路

  1. 使用遞迴
    首先排除掉所有不對稱和空節點的情況;
    (左空右非空)(左非空右空)(左右為空)
    接著判斷節點是否是對稱(對稱節點的值是否是相等的)

在主函式的時候判斷根節點是否為空,為空直接返回true

程式碼


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        // 遞迴演算法
        
        if(root == NULL)
        {
            return true;
        }
        return cmp(root->left, root->right);
    }
    bool cmp(TreeNode* left, TreeNode* right){
            if(left==NULL && right!=NULL)   return false;
            else if(left!=NULL && right==NULL)   return false;
            else if(left==NULL && right==NULL)   return true;
            else if(left->val!=right->val)  return false;
            bool issy = cmp(left->left, right->right)&&cmp(left->right,right->left);
            return issy;
        }
};

Python 版本

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        # 判斷節點kong
        if(root is None):
            return True
        return self.cmp(root.left, root.right)

    def cmp(self, left:TreeNode, right:TreeNode) -> bool:
        if left is None and right is not None:
            return False
        elif left is not None and right is None:
            return False
        elif left is None and right is None:
            return True
        else:
            if(left.val!=right.val):
                return False
            isSym = self.cmp(left.left, right.right) and self.cmp(left.right, right.left)
        return isSym
            


本文來自部落格園,作者:jucw,轉載請註明原文連結:https://www.cnblogs.com/Jucw/p/15770626.html