该开始看这道题可能看的感觉云里雾里的,不知道题目在说什么。但其实就是将树的中序遍历列出来,然后从后往前累加,再填回树中。
如:一个二叉搜索树:5,2,13.其中序遍历为:2,5,13.累加过后的中序为:20,18,13。再填回树中:18,20,13。
因为是中序从后往前累加,所以遍历顺序就变成了:右,中,左。是一个反中序遍历。这样思考的话,本题就变简单了
class Solution { int pre = 0;//需要一个前置节点记录数值,方便累加 public TreeNode convertBST(TreeNode root) { //中序遍历,然后从后往前累加即可 //用右,中,左的反中序遍历 traversal(root); return root; } public void traversal(TreeNode root) { if (root == null) return ; //右 traversal(root.right); //中 root.val+=pre; pre = root.val; //左 traversal(root.left); } }