1. 程式人生 > >LeetCode刷題——把二叉搜尋樹轉換為累加樹

LeetCode刷題——把二叉搜尋樹轉換為累加樹

大家好,繼續刷題,今天刷到一道很巧妙的題,來看題目要求:

思路:因為是二叉搜尋樹,所以先遞迴右子樹,然後把中間節點累加起來,然後遞迴左子樹就可以了。其實想明白這個就很簡單了,主要還是要利用搜索樹的特性。

/**
 * 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:
    int sum = 0;
    TreeNode* convertBST(TreeNode* root) {
        Sumnum(root);
        return root;
    }
    void Sumnum(TreeNode * root){
        if(!root)
            return;
        Sumnum(root -> right);
        root -> val += sum;
        sum = root -> val;
        Sumnum(root -> left);
    }
};

我們下期見!

相關推薦

LeetCode——搜尋轉換累加

大家好,繼續刷題,今天刷到一道很巧妙的題,來看題目要求: 思路:因為是二叉搜尋樹,所以先遞迴右子樹,然後把中間節點累加起來,然後遞迴左子樹就可以了。其實想明白這個就很簡單了,主要還是要利用搜索樹的特性。 /** * Definition for a binary t

leetcode 538. 搜尋轉換累加

題目描述:給定一個二叉搜尋樹(Binary Search Tree),把它轉換成為累加樹(Greater Tree),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。例如:輸入: 二叉搜尋樹: 5 / \

LeetCode 538 python 搜尋轉換累加

思路:root.val += root.right     root.left += root.val # Definition for a binary tree node. # class TreeNode(object): # def __init__(sel

LeetCode 搜尋轉換累加

第538題 給定一個二叉搜尋樹(Binary Search Tree),把它轉換成為累加樹(Greater Tree),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。 例如: 輸入: 二叉搜尋樹: 5 / \ 2

[Swift]LeetCode538. 搜尋轉換累加 | 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

538. 搜尋轉換累加 題解

class Solution { // 先將右子樹轉換為累加樹;並記錄右子樹的累加和rightSum; // 然後處理根節點,根節點的值 = 根節點值 + rightSum; // 然後轉化左子樹 public TreeNode conver

538. 搜尋轉換累加

題目分析: 其實只要看到BST就應該立馬想到它的一個重要的性質:其中序遍歷序列是非遞減的。因此本題目的思路就是:先求樹中所有結點值的和sum,然後中序遍歷BST,用sum代替之前的結點值,然後更新sum。 請看下面的程式碼: class

538 Convert BST to Greater Tree 搜索轉換累加

arch rtb efi fin tac problem https 一個 htm 給定一個二叉搜索樹(Binary Search Tree),把它轉換成為累加樹(Greater Tree),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。例如:輸入: 二叉搜索樹

LeetCode】99. 恢復搜尋報告 (C++)

原題地址:https://leetcode-cn.com/problems/recover-binary-search-tree/description/ 題目描述: 二叉搜尋樹中的兩個節點被錯誤地交換。 請在不改變其結構的情況下,恢復這棵樹。 示例 1: 輸入: [1,3,nu

LeetCode演算法108:將有序陣列轉換搜尋解析

將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定有序陣列: [-10,-3,0,5,9], 一個可能的答案是:[0,-3,9,-10,nul

LeetCode :尋找的最大深度

題目為: Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node d

LeetCode演算法——完全的節點個數

對於這道題首先會想到遞迴判斷節點,不為空就加1,程式碼如下(但是會超時): //會超時 public class Solution { if (root == null) return 0; return CountNodes(root.left) + CountNodes(ro

Leetcode 95. 不同的搜尋 II C++

題目描述 思路 首先,本題是另外一個題的升級版,詳細解答。這兩個題都是用到了動態規劃的思想,大的思路是差不多的。不過,這個題要複雜得多。解本題之前一定要先去看一看上一個題的思路。 本題思路,和上一個題一樣,通過迴圈歷遍每一個元素。以這個元素作為根節點,那麼比它小的元素就只能是屬

Leetcode:96.不同的搜尋&&Leetcode:95.不同的搜尋II

Leetcode:96.不同的二叉搜尋樹 給定一個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種? 示例: 輸入: 3 輸出: 5 解釋: 給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹: 1 3

LeetCode 96——不同的搜尋

1. 題目 2. 解答 以 1 , 2

LeetCode】 98 驗證搜尋

解題思路: 1 二叉搜尋樹和中序遍歷有著密不可分的關係,中序遍歷的結果是所有樹中的節點從左到右的排列。如上圖示例2中的樹 中序遍歷結果應是15346 2 基於1,我們易知,如果中序遍歷的結果是升序排列的,那麼此樹符合二叉搜尋樹的要求,所以可以用中序遍歷並檢測檢測結果的升序情況來做

leetcode 96. 不同的搜尋

給定一個整數 n,求以 1 … n 為節點組成的二叉搜尋樹有多少種? 示例: 輸入: 3 輸出: 5 解釋: 給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹: 1

leetCode 96. 不同的搜尋(swif)

給定一個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種? 示例: 輸入: 3 輸出: 5 解釋: 給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹: 1

LeetCode-96.不同的搜尋(相關話題:動態規劃)

給定一個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種? 示例: 輸入: 3 輸出: 5 解釋: 給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹: 1 3 3 2 1 \ /

LeetCode】98. 驗證搜尋

題目描述 給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。 假設一個二叉搜尋樹具有如下特徵: 節點的左子樹只包含小於當前節點的數。 節點的右子樹只包含大於當前節點的數。 所有左子樹和右子樹自身必須