zoukankan      html  css  js  c++  java
  • 把二叉搜索树转化成更大的树 · Convert BST to Greater Tree

    [抄题]:

    给定二叉搜索树(BST),将其转换为更大的树,使原始BST上每个节点的值都更改为在原始树中大于等于该节点值的节点值之和(包括该节点)。

    Given a binary search Tree `{5,2,13}`:

                  5
                /   
               2     13
    

    Return the root of new tree 

                 18
                /   
              20     13

     [暴力解法]:

    时间分析:

    空间分析:

    [思维问题]:

    [一句话思路]:

    反向求和并把和赋给root.val

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. DFS中要有特殊情况判断 if (cur == null)
    2. 形参最好是写成cur节点
    3. root包括两个东西:值val以及位置,需要改变值时,给cur.val
    4. 在recursion的原理下,sum = sum + curt;就行了,不是sum = sum + curt.right;。因为前一步已经遍历了右节点,并放到curt中了。

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    root包括两个东西:值val以及位置,需要改变值时,给cur.val

    [复杂度]:Time complexity: O(lgn) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    public class Solution {
        /*
         * @param root: the root of binary tree
         * @return: the new root
         */
        public TreeNode convertBST(TreeNode root) {
            bfs(root);
            return root;
        }
        //bfs
        int sum = 0;
        void bfs(TreeNode curt) {
            if (curt == null) {
                return ;
            }
            bfs(curt.right);
            sum += curt.val;
            curt.val = sum;
            bfs(curt.left);
        }
    }
    View Code
  • 相关阅读:
    quick-cocos2d-x游戏开发【5】——创建菜单
    cocos2d-x3.0 lua学习(一个)
    hdu 3001 Travelling (TSP问题 )
    朱重组成功,?(行家都知道,几乎回答)
    无人机DLG生产作业流程
    自己定制个人无人机需要的准备工作的内容
    C# 多线程网络爬虫
    [转] c#中 多线程访问winform控件
    C# WinForm中 让控件全屏显示的实现代码
    5.数据绑定和表单标签库
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8452184.html
Copyright © 2011-2022 走看看