1. 程式人生 > >017-101-Symmetric Tree 判斷樹是否對稱

017-101-Symmetric Tree 判斷樹是否對稱

Question

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3
But the following [1,2,2,null,3,null,3] is not:
    1
   / \
  2   2
   \   \
   3    3

Note:
Bonus points if you could solve it both recursively and iteratively.

Solution

通過觀察,樹的映象是指每個節點的左右子樹互換,先遍歷右子樹,並交換每個節點的左右子樹,然後判斷左右子樹是否相等參考 007-100-判斷兩個二叉樹是否相等 Same Tree

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
void switchNode(struct TreeNode* root){
    if(root != NULL){
        struct
TreeNode* tmp = root->left; root->left = root->right; root->right = tmp; switchNode(root->left); switchNode(root->right); } } bool isSameTree(struct TreeNode* p, struct TreeNode* q) { if(p == NULL || q == NULL){ return (p == q); }else
{ if(p->val != q->val){ return false; }else{ return isSameTree(p->left, q->left)&&isSameTree(p->right, q->right); } } } bool isSymmetric(struct TreeNode* root) { if(root != NULL){ switchNode(root->right); return isSameTree(root->left, root->right); } return true; }

時間效率是O(n), 這個解法唯一不好的就是改變了輸入的結構。