力扣劍指Offer(十)
阿新 • • 發佈:2021-06-24
1、對稱的二叉樹
請實現一個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。
例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。
1
/
2 2
/ \ /
3 4 4 3
但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的:
1
/
2 2
\
3 3
示例 1:
輸入:root = [1,2,2,3,4,4,3]
輸出:true
示例 2:
輸入:root = [1,2,2,null,3,null,3]
輸出:false
限制:
0 <= 節點個數 <= 1000
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { return root==NULL?true:recur(root->left,root->right); } bool recur(TreeNode* left,TreeNode* right) { if(left==NULL&&right==NULL) return true; if(left==NULL||right==NULL||left->val!=right->val) return false; return recur(left->right,right->left)&&recur(left->left,right->right); } };
2、二叉樹的映象
請完成一個函式,輸入一個二叉樹,該函式輸出它的映象。
例如輸入:
4
/
2 7
/ \ /
1 3 6 9
映象輸出:
4
/
7 2
/ \ /
9 6 3 1
示例 1:
輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]
限制:
0 <= 節點個數 <= 1000
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* mirrorTree(TreeNode* root) { recur(root); return root; } void recur(TreeNode* root) { if(root==NULL||(root->left==NULL&&root->right==NULL)) return; TreeNode* tmp; tmp=root->left; root->left=root->right; root->right=tmp; recur(root->left); recur(root->right); } };