前言
为了贴合题意,采用逆中序遍历,结合二叉搜索树的prefix和suffix来解题,对于二叉搜索树,往往要和前缀关联起来,这种一题一般都是关于中序遍历前驱后继的题。
一、案例
二、题解
package com.xhu.offer.offerII;
//所有大于等于节点的值之和
public class ConvertBST {
//逆中序遍历
//总结:对于二叉搜索树,往往要和前缀关联起来,这种一题一般都是关于中序遍历前驱后继的题。
public TreeNode convertBST(TreeNode root) {
int[] prefix = new int[]{0};
inOrder(root, prefix);
return root;
}
private void inOrder(TreeNode root, int[] prefix) {
if (root == null) return;
inOrder(root.right, prefix);
prefix[0] += root.val;
root.val = prefix[0];
inOrder(root.left, prefix);
}
//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;
}
}
}
总结
1)对于二叉搜索树,往往要和前缀关联起来,这种一题一般都是关于中序遍历前驱后继的题。
参考文献
[1] LeetCode 原题