牛客題霸 [二叉樹中是否存在節點和為指定值的路徑] C++題解/答案

Jozky86發表於2020-11-05

牛客題霸 [二叉樹中是否存在節點和為指定值的路徑] C++題解/答案

題目描述

給定一棵二叉樹,判斷琪是否是自身的映象(即:是否對稱)
例如:下面這棵二叉樹是對稱的
1
/
2 2
/ \ /
3 4 4 3
下面這棵二叉樹不對稱。
1
/
2 2
\
3 3
備註:
希望你可以用遞迴和迭代兩種方法解決這個問題

題解:

遞迴法:
自定義一個判斷函式,來不斷遞迴左右兩邊子樹的對稱子樹是否相等
也就是左子樹的左邊和右子樹的右邊比較

isEqual(node1->left,node2->right)&&isEqual(node1->right,node2->left);

注:空子樹也是對稱的
這個思路比較簡單
迭代法:
用棧來存根的左右兩邊子樹,然後用while不斷彈出元素,比較,再壓入新元素
(迭代法的程式碼就略了)

程式碼:

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode類 
     * @return bool布林型
     */
    bool isEqual(TreeNode* node1,TreeNode* node2)
    {
        if(node1==NULL&&node2==NULL)
        {
            return true;
        }
        if(node1==NULL||node2==NULL)
        {
            return false;
        }
        if(node1->val!=node2->val)
        {
            return false;
        }
        return isEqual(node1->left,node2->right)&&isEqual(node1->right,node2->left);
    }
    bool isSymmetric(TreeNode* root) {
        // write code here
        if(root==NULL)return 1;
       // if(!root->left&&!root->left)return root->val;
        return isEqual(root->left, root->right);
    }
};

相關文章