1. 程式人生 > >538. 把二叉搜尋樹轉換為累加樹 題解

538. 把二叉搜尋樹轉換為累加樹 題解

class Solution {

    // 先將右子樹轉換為累加樹;並記錄右子樹的累加和rightSum;
    // 然後處理根節點,根節點的值 = 根節點值 + rightSum;
    // 然後轉化左子樹
    public TreeNode convertBST(TreeNode root) {
        convert(root, 0);
        return root;
    }
    
    public int convert(TreeNode root, int rightSum){
        if(null == root){
            return rightSum;
        }
        rightSum = convert(root.right, rightSum);
        root.val = root.val + rightSum;
        rightSum = root.val;
        rightSum = convert(root.left, rightSum);
        return rightSum;
    }
}
class Solution {
    
    // !!! 不太很優雅,但卻讓程式碼更容易理解!!!
    private int rightSum = 0;

    // 先將右子樹轉換為累加樹;並記錄右子樹的累加和rightSum;
    // 然後處理根節點,根節點的值 = 根節點值 + rightSum;
    // 然後轉化左子樹
    public TreeNode convertBST(TreeNode root) {
        if(null == root){
            return root;
        }
        convertBST(root.right);
        root.val = root.val + rightSum;
        rightSum = root.val;
        convertBST(root.left);
        return root;
    }
}

相關推薦

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

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),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。例如:輸入: 二叉搜索樹

[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

LeetCode刷題——搜尋轉換累加

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

LeetCode 搜尋轉換累加

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

排序陣列轉換高度最小的搜尋

題目描述:給一個排序陣列(從小到大),將其轉換為一棵高度最小的二叉搜尋樹。 樣例:給出陣列 [1,2,3,4,5,6,7], 返回 首先,先來看一下二叉搜尋樹(也稱為二叉排序樹)的定義:它或者是一棵

lintcode——排序陣列轉換高度最小的搜尋

/**  * Definition of TreeNode:  * class TreeNode {  * public:  *     int val;  *     TreeNode *left, *right;  *     TreeNode(int val) {  *         this->

Leetcode:108.將有序陣列轉換搜尋&&Leetcode:109.將有序連結串列轉換搜尋

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

leetcode-將有序陣列轉換搜尋(JavaScript)

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

leetcode 108. 將有序陣列轉換搜尋(java)

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

108. 將有序陣列轉換搜尋

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

leetcode-108. 將有序陣列轉換搜尋

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

leetcode 108. 將有序陣列轉換搜尋

始終使用陣列中間的數為父節點,兩邊的子陣列構成兩個子樹。 TreeNode* sortedArrayToBST(vector<int> &nums) { int size_nums = nums.size(); if (size_

[LeetCode javaScript] 108. 將有序陣列轉換搜尋

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

LeetCode 108. 將有序陣列轉換搜尋 Python

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

LeetCode 108.Convert Sorted Array to Binary Search Tree (將有序陣列轉換搜尋)

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

108. 將有序陣列轉換搜尋(簡單,陣列,

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