zoukankan      html  css  js  c++  java
  • 常见二叉树问题

    111(求最低深度)

    思路:找出左右子树是否是最小,注意会出现没有左右子树的现象

    226(反转二叉树)

    思路:递归遍历,然后交换

    /**
     * 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* invertTree(TreeNode* root) {
            if(root==NULL)
                return 0;
            
            invertTree(root->left);
            invertTree(root->right);
            swap(root->left,root->right);
            
            return root;
        }
    };

    100(判断相同的树)

    思路:先判断父节点是否相同,然后再分别递归判断左右叶子节点是否相同。注意当有任一父节点为空的时候,结果都为false。

    101(对称二叉树判断)

    思路:深搜左右子节点是否满足:左边的左节点=右边的右节点,右边的左节点=左边的右节点

    222

    110

    112:(是否存在左右节点相加的和等于目标值的路径)

    思路:分别递归搜索左右子树的和是否等于一条连续的叶子节点

    /**
     * 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 hasPathSum(TreeNode* root, int sum) {
            if(root==NULL)
                return 0;
            
            if(root->left==NULL&&root->right==NULL)
                return root->val==sum;
            
            if(hasPathSum(root->left,sum-root->val))
                return true;
            
            if(hasPathSum(root->right,sum-root->val))
                return true;
            
            return false;
        }
    };
    

    404

    257(找出二叉树所有路径)

    /**
     * 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:
        vector<string> binaryTreePaths(TreeNode* root) {
            vector<string> res;
            
            if(root==NULL)
                return res;
            
            if(root->left==NULL&&root->right==NULL){
                res.push_back(to_string(root->val));
                return res;    
            }
            
            vector<string> leftS=binaryTreePaths(root->left);
            for (int i=0;i<leftS.size();i++)
                res.push_back(to_string(root->val) + "->" + leftS[i]);
            
            vector<string> rightS=binaryTreePaths(root->right);
            for (int i=0;i<rightS.size();i++)
                res.push_back(to_string(root->val)+"->"+rightS[i]);
            
            return res;
        }
    };

    113

     129

    437

  • 相关阅读:
    synthetic-load-generator 一个不错的opentracing trace && metrics && logs 生成工具
    记一次php.ini配置不合理造成系统加载偏慢问题
    Data-Prepper opendistro 开源的基于es 的trace 分析工具
    使用babel-standalone 让浏览器支持es6特性
    tempo grafana 团队开源的分布式追踪框架
    grafana/agent grafana 团队开源的兼容prometheus 的agent
    k6 集成goja 的部分集成说明
    spf13/afero 通用文件系统试用
    goja 支持es6的一种方法
    salesforce 跨组织数据可见性的方案
  • 原文地址:https://www.cnblogs.com/darklights/p/11690037.html
Copyright © 2011-2022 走看看