美文网首页LeetCode
二叉查找树转换为较大树

二叉查找树转换为较大树

作者: 徐凯_xp | 来源:发表于2018-06-18 16:46 被阅读0次

Leetcode 538
已知一个二叉查找树,将它转换为一个较大树,即所有的二叉查找树的节点,赋值为该节点本身的值与该节点大的节点的值的和

思考与分析

较大树中的节点与二叉树的节点一一对应,对于任意二叉查找树节点,需要将大于该节点的节点值累加到该节点上。暴力的方法是,对于每个节点,进行整棵树的遍历,将比它大的节点值进行累加,时间复杂度为O(n2)

思考

按照怎么样的方式,就可以在一次遍历整棵树的情况下,对节点值进行累加,当完成整棵树的遍历后,全部节点完成修改,整体时间复杂度O(n)


算法设计

修改中序遍历二叉树,先遍历二叉树右子树,再遍历该节点本身,最后遍历二叉树左子树,在中序遍历节点的时候将节点的值累加到全局变量sum中,在中序遍历时修改节点的值为sum.


void travel_tree(TreeNode *node, int &sum){
    if(!node){
        return;
    }
    travel_tree(node->right,sum);
    sum = sum + node->val;
    node->val = sum;
    travel_tree(node->left,sum);
}
class Solution{
public:
    TreeNode *convertBST(TreeNode *root){
        int sum = 0; 
        travel_tree(root, sum);
        return root;
    }
};

相关文章

  • 二叉查找树转换为较大树

    Leetcode 538已知一个二叉查找树,将它转换为一个较大树,即所有的二叉查找树的节点,赋值为该节点本身的值与...

  • Java_二叉树概念及基本操作

    树、森林和二叉树的转换 树转换为二叉树 森林转换为树 二叉树转换为树 二叉树转换为森林 代码

  • 将二叉查找树转换为链表

    在不创建任何新节点的条件下将二叉查找树转换为排序的双向链表。 solution_1 二叉查找树的特点就是左子节点<...

  • 极客时间数据结构与算法之美笔记25~26

    二叉树到二叉查找树,是为了查找数据的效率接近logN。 二叉查找树到平衡二叉查找树,是为了防止二叉查找树沦为链表。...

  • 二叉查找树

    1)二叉查找树是什么?2)二叉查找树的插入、删除、查找?3)Go代码实现 一、二叉查找树是什么?二叉查找树(BST...

  • 红黑树

    红黑树的本质就是一棵二叉查找树,所以先从二叉查找树来了解起。 二叉查找树 二叉查找树又称有序二叉树,具有以下特性:...

  • 排序数组转换为二叉查找树

    已知一个排序的数组,将该数组转换为一个高度平衡的二叉查找树。平衡的定义: 二叉查找树中,任意节点的两颗子树高度差不...

  • 二叉查找树

    二叉查找树,又称二叉搜索树 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: ...

  • 99-数据结构和算法

    难点:二叉树的遍历 红黑树 图的遍历 二叉查找树二叉查找树(binary search tree),二叉查找树在二...

  • 11-二叉查找树

    二叉查找树 1.什么是二叉查找树? 二叉查找树是一种支持数据动态的插入,删除,查找的数据结构。 2.二叉查找树的设...

网友评论

    本文标题:二叉查找树转换为较大树

    本文链接:https://www.haomeiwen.com/subject/iyyneftx.html