详细题目链接,类似题目654. 最大二叉树。
由654可以总结出 按照中序遍历就是输入数组的顺序。由此可知,在数组最后添上一个数后会有三种情况。
1.新节点在根节点上面,即 val>root.val
。
2.新节点在最右节点的右下,即 temp.right==null&&temp.val>val
。
3.新节点在根节点和最右节点的中间,这时需要对节点进行处理。
三种例子如下:
在第二种情况中寻找合适节点时会一直向右下移动,直到到达右下角即第三种情况。
整理后代码如下:
public class lc998 {
public TreeNode insertIntoMaxTree(TreeNode root, int val) {
if(root==null) return null;
TreeNode temp = root;
TreeNode node = new TreeNode(val);
//第一种情况
if(root.val<val){
node.left = root;
return node;
}
//第二种情况
while(temp.right!=null){
if(temp.right.val<val){
node.left = temp.right;
temp.right = node;
return root;
}
temp = temp.right;
}
//第三种情况
temp.right = node;
return root;
}
}