C語言遞歸之對稱二叉樹

題目描述node

給定一個二叉樹,檢查它是不是鏡像對稱的。網絡

示例ide

二叉樹 [1,2,2,3,4,4,3] 是對稱的。spa

    1
   / \
  2   2
 / \ / \
3  4 4  3

[1,2,2,null,3,null,3] 則不是鏡像對稱的。code

    1
   / \
  2   2
   \   \
   3    3

 

題目要求blog

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     struct TreeNode *left;
 6  *     struct TreeNode *right;
 7  * };
 8  */
 9 
10 bool isSymmetric(struct TreeNode* root){
11 
12 }

 

題解遞歸

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     struct TreeNode *left;
 6  *     struct TreeNode *right;
 7  * };
 8  */
 9 
10 bool fun(struct TreeNode* r1,struct TreeNode* r2){
11     if(r1==NULL&&r2==NULL)return true;
12     if(r1==NULL||r2==NULL)return false;
13     if(r1->val!=r2->val)return false;
14     return fun(r1->left,r2->right)&fun(r1->right,r2->left);
15 }
16 
17 bool isSymmetric(struct TreeNode* root){  
18     if(root==NULL)return true;
19     return fun(root->left,root->right);  
20 }
題解

 

遞歸leetcode

遞歸的難點就在於想出要遞歸什麼,常常狀況是看了一下有那麼點思路,可是一寫就不會,真正想明白以後恍然大悟,仍是要耐心思考。get

對於此題,判斷遞歸點就須要一步一步分析:it

1.判斷一棵樹是否是對稱二叉樹,首先看根節點,根節點爲空則true,根節點不爲空則比較其左樹和右樹,左樹右樹對稱時則爲對稱二叉樹。

2.比較左樹右樹是否對稱,首先須要左樹的值和右樹的值相等,其次須要左樹的左子樹與右樹的右子樹相等且左樹的右子樹與右樹的左子樹相等,不然不對稱。

3.此時遞歸點就出現了,判斷左樹與右樹是否對稱的操做其實和判斷左樹的左子樹與右樹的右子樹是否對稱的操做相同。

4.這時就能夠直接寫代碼了,fun(左樹, 右樹) = fun(左樹的左子樹, 右樹的右子樹) & fun(左樹的右子樹, 右樹的左子樹)。

 

題目來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/symmetric-tree/著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索