zoukankan      html  css  js  c++  java
  • 剑指OFFER 对称的二叉树

    剑指OFFER 对称的二叉树

    思路

    先正向先序遍历一次(先左子树,后右子树),再反向先序遍历一次(先右子树,后左子树).看两次遍历的结果是否相同,如果相同,那么说明是对称的.

    分析

    节点对称有两个含义, 1.节点的值相等 2.节点在树种的位置对称

    如何准确地表示出节点在树中的位置是难点

    注意

    • 空结点也需要使用占位符标记出来.这种情况确实是盲点. 因为按照常规的遍历方法,遇到空节点就不做任何处理直接返回了,会导致两颗不同的树遍历的结果是相同的.这也是为什么一颗树需要先序遍历序列和中序遍历序列两个序列(至少两个序列)来表示的原因. 但如果有用来标识空节点的占位符,那么只需要一种序列即可表达该树的结构.

    代码

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    
    class Solution {
    public:
    
        vector<int> v_for;
        vector<int> v_bak;
        
        void recur_for(TreeNode* node)
        {
            if(node == NULL)
            {
                v_for.push_back(0);
                return ;
            }
            v_for.push_back(node->val);
            
            recur_for(node->left);
            recur_for(node->right);
        }
        void recur_bak(TreeNode* node)
        {
            if(node == NULL)
            {
                v_bak.push_back(0);
                return ;
            }
            v_bak.push_back(node->val);
            
            recur_bak(node->right);
            recur_bak(node->left);
            
        }
        bool isSymmetrical(TreeNode* pRoot)
        {
            if(pRoot == NULL)return true;
            recur_for(pRoot);
            recur_bak(pRoot);
            
            int for_size = v_for.size();
            int bak_size = v_bak.size();
            if(for_size != bak_size)return false;
            for(int i=0;i<for_size;i++)
            {
                if(v_for[i]!=v_bak[i])return false;
            }
            return true;
    
        }
    
    };
    
  • 相关阅读:
    redis学习(四)
    redis学习(三)
    redis学习(二)
    redis学习(一)
    Maven入门(二)pom.xml和核心概念
    Maven入门(一)
    uni-app 引用
    uni-app 搜索栏
    Vue,组件切换-切换动画
    Vue,组件切换-方式2
  • 原文地址:https://www.cnblogs.com/virgildevil/p/12210109.html
Copyright © 2011-2022 走看看