zoukankan      html  css  js  c++  java
  • Leecode 538

    1 题目

    Leecode 538:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/

    Leecode 1038:https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree

    2 题意

    给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。

    例如:

    输入: 原始二叉搜索树:
                  5
                /   
               2     13
    
    输出: 转换为累加树:
                 18
                /   
              20     13
    
    

    3 思路

    author's blog == http://www.cnblogs.com/toulanboy/

    3. 1 二叉搜索树

    (1)定义:若一颗二叉树,其左边的节点都小于等于根节点,右边的节点都大于等于根节点,那么该树被称为二叉搜索树。

    (2)特征:中序遍历的结果是个递增序列。

    3.2 解题思路

    题目需要我们把每个节点的值更改为,大于等于该值的所有数值的和(包含他本身)。

    我们可以借助遍历获得每个点的数值,然后统计起来利用。

    (1)一般的思维:

    • 可以考虑先遍历每个点,记录每个点的情况。
    • 由于中序便利出来的是有序的升序序列,那么我们可以得知大于等于某个点的情况。
    • 只需再遍历一遍进行更新。但是这个方法需要2次遍历,而且需要统计后缀和。

    (2)进一步思考

    这里看了题解才恍然大悟。惭愧(--。

    较好的方案:执行反的中序遍历,遍历逻辑为:右子树、根节点、左子树,就会得到一个降序序列。在这次遍历的过程中,当我们遍历到第i个点时,大于等于第i个点所有节点都已经被遍历,故可以直接得到第i个点应该被更新的数值。

    4 代码

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    //author's blog == http://www.cnblogs.com/toulanboy/
    class Solution {//代码是Leecode 538的
    public:
        int sum = 0;
        void get_tree_sum(TreeNode * root){
            if(root == NULL)
                return;
            get_tree_sum(root->right);
            sum += root->val;//累加大于等于当前值的所有数值和
            root->val = sum;//当前节点的值 便是 上述统计的和
            get_tree_sum(root->left);
            return;
        }
        TreeNode* convertBST(TreeNode* root) {
            get_tree_sum(root);
            return root;
        }
    };
    
  • 相关阅读:
    Django之DB数据库优化
    whatweb运行流程详解,适用于小白
    阿里云部署Django详细过程
    web指纹识别技术
    whatweb运行原理及各文件的作用详解
    Ruby种的特殊变量
    Ruby正则练习面试题
    centos7安装升级Ruby
    Ruby中的<<和>>的作用详解
    git操作指令合集
  • 原文地址:https://www.cnblogs.com/toulanboy/p/13709058.html
Copyright © 2011-2022 走看看