【Leetcode】NO.101 對稱二叉樹(C++&Python)[二叉樹]
阿新 • • 發佈:2022-01-06
二叉樹第九彈!!!
題目 101. 對稱二叉樹
給定一個二叉樹,檢查它是否是映象對稱的。
思路
- 使用遞迴
首先排除掉所有不對稱和空節點的情況;
(左空右非空)(左非空右空)(左右為空)
接著判斷節點是否是對稱(對稱節點的值是否是相等的)
在主函式的時候判斷根節點是否為空,為空直接返回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