问题描述:
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
package com.onlyqi.upup01.leetcode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class Frog {
public static void main(String[] args) {
TreeNode treeNode=new TreeNode(2);
TreeNode treeNode2=new TreeNode(5);
TreeNode treeNode3=new TreeNode(13);
treeNode.setLefTreeNode(treeNode2);
treeNode.setRightNode(treeNode3);
preTraverseBTree(treeNode);
Collections.sort(list);
System.out.println("=========================="+list);
preTraverseBTree1(treeNode);
System.out.println("**********************");
//preTraverseBTree(treeNode);
}
public static List<Integer> list=new ArrayList<>();
public static void preTraverseBTree(TreeNode rootTreeNode){
if(rootTreeNode !=null){
//访问根节点
list.add(rootTreeNode.getValue());
System.out.println(rootTreeNode.getValue());
//访问左节点
preTraverseBTree(rootTreeNode.getLefTreeNode());
//访问右节点
preTraverseBTree(rootTreeNode.getRightNode());
}
}
public static void preTraverseBTree1(TreeNode rootTreeNode){
if(rootTreeNode !=null){
Integer a=rootTreeNode.getValue();
// //访问根节点
rootTreeNode.setValue(rootTreeNode.getValue()+list.subList(list.indexOf(rootTreeNode.getValue())+1,list.size()).stream().collect(Collectors.summingInt(p->p)));
System.out.println(rootTreeNode.getValue());
//访问左节点
preTraverseBTree1(rootTreeNode.getLefTreeNode());
//访问右节点
preTraverseBTree1(rootTreeNode.getRightNode());
}
}
}
package upup12;
public class TreeNode {
private TreeNode LefTreeNode;
private TreeNode RightNode;
private Integer value;
public TreeNode() {
}
public TreeNode(TreeNode lefTreeNode, TreeNode rightNode, Integer value) {
LefTreeNode = lefTreeNode;
RightNode = rightNode;
this.value = value;
}
public TreeNode( Integer value) {
this.value = value;
}
public TreeNode getLefTreeNode() {
return LefTreeNode;
}
public void setLefTreeNode(TreeNode lefTreeNode) {
LefTreeNode = lefTreeNode;
}
public TreeNode getRightNode() {
return RightNode;
}
public void setRightNode(TreeNode rightNode) {
RightNode = rightNode;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
}
运行结果:
我要刷100道算法题,第79道