zoukankan      html  css  js  c++  java
  • Leetcode 538. Convert BST to Greater Tree

    Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.

    Example:

    Input: The root of a Binary Search Tree like this:
                  5
                /   
               2     13
    
    Output: The root of a Greater Tree like this:
                 18
                /   
              20     13

    解题思路:按照题目意思,是从最右右子树开始累加sum,所以可以按照右子树 -> 中间节点 -> 左子树 这样的顺序去对这个二叉查找树进行累加节点数值。
     1 #include <stdio.h>
     2 
     3 struct TreeNode {
     4     int val;
     5     TreeNode *left;
     6     TreeNode *right;
     7     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8 };
     9 
    10 void travel_tree(TreeNode *node, int &sum){
    11     if (!node){
    12         return;
    13     }
    14     travel_tree(node->right, sum);
    15     sum += node->val;
    16     node->val = sum;
    17     travel_tree(node->left, sum);
    18 }
    19 
    20 class Solution {
    21 public:
    22     TreeNode* convertBST(TreeNode *root) {
    23         int sum = 0;
    24         travel_tree(root, sum);
    25         return root;
    26     }
    27 };
    28 
    29 void preorder_print(TreeNode *node, int layer){
    30     if (!node){
    31         return;
    32     }
    33     for (int i = 0; i < layer; i++){
    34         printf("-----");
    35     }
    36     printf("[%d]
    ", node->val);
    37     preorder_print(node->left, layer + 1);
    38     preorder_print(node->right, layer + 1);
    39 }
    40 
    41 int main(){
    42     TreeNode a(5);
    43     TreeNode b(3);
    44     TreeNode c(6);
    45     TreeNode d(2);
    46     TreeNode e(4);
    47     TreeNode f(7);
    48     a.left = &b;
    49     a.right = &c;
    50     b.left = &d;
    51     b.right = &e;
    52     c.right = &f;
    53     Solution solve;
    54     TreeNode *root = solve.convertBST(&a);
    55     preorder_print(&a, 0);
    56     return 0;
    57 }

  • 相关阅读:
    Python深拷贝和浅拷贝解析
    python中count函数的用法
    Jenkins + gitlab + maven 自动打包部署项目
    nio和bio得区别
    nginx负载均衡的5种策略
    接口测试常见bug
    接口自动化面试4
    pass 语句
    if 语句
    while循环
  • 原文地址:https://www.cnblogs.com/Hwangzhiyoung/p/8733586.html
Copyright © 2011-2022 走看看