zoukankan      html  css  js  c++  java
  • BST数据结构题

    给定BST。改动BST,使得每一个点都是大于他的结点的值之和

    关键是这题递归參数怎么设计,每一个点比他大的有两快。一个是右子书(假设有的话),还有一个是祖先里面比他大的,假设直接用这两个的话,找不到递归结构。

    应该设计第一个參数是祖先比他大的节点和,第二个參数是子树的和。包含自身。


    struct Node
    {
      int val;
      Node* left, *right;
    };
    
    class Solution
    {
      void GreaterSumBST(Node* root){
        int SubTreeSum=0;
        F(root, 0, SubTreeSum);
      }
      void F(Node* root, int AncestorGreaterSum, int& SubTreeSum){
        if(!root){
          SubTreeSum=0;
          return ;
        }
        int LeftSubTreeSum=0, RightSubTreeSum=0;
        F(root->right, AncestorGreaterSum, RightSubTreeSum);
        F(root->left, AncestorGreaterSum+root->val+RightSubTreeSum, LeftSubTreeSum);
        SubTreeSum=LeftSubTreeSum+RightSubTreeSum;
        root->val=AncestorGreaterSum+RightSubTreeSum;
      }
    };

    时间复杂度ON,空间O1,此处不包括系统栈

  • 相关阅读:
    Properties类
    缓冲流
    Mybatis
    分页查询
    QueryRunner和JDBC连接池
    JSP
    Session
    Cookie
    http协议和eclipes绑定tomcat
    servlet
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7284116.html
Copyright © 2011-2022 走看看