力扣-538-把二叉搜索树转换为累加树
1、什么是二叉搜索树?
二叉搜索树是一棵空树,或者是具有下列性质的二叉树:
- 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
- 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
- 它的左、右子树也分别为二叉搜索树
我们都知道二叉搜索树的中序遍历是递增的序列;那么反中序遍历就是递减的序列。那么我们只需要反中序遍历整棵二叉搜索树,记录过程中的节点值之和sum(因为当前节点之前的值必定都是大于它的),不断更新当前节点的节点值即可。
反中序遍历的结果:
8 7 6 5 4 3 2 1 0 8 15 21 26 30 33 35 36 36 //不断更新的Sum值
代码:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { int sum = 0; public TreeNode convertBST(TreeNode root) { if(root == null){ return root; } convertBST(root.right); //更新当前节点右子树的val值 sum += root.val; root.val = sum; //更新当前节点的val convertBST(root.left); //更新当前节点左子树的val值 return root; } }
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!