题目描述
思路
遍历右子节点
如果根节点的值小于给定的整数val,则新的树会以val为根节点,并将原来的树作为新的根节点的左子树。然后,从根结点开始不断地向右子结点进行遍历。当遍历到结点cur和其父结点parent,并且cur结点的值小于val时,可以停止遍历,构造一个新的结点,以val为值且以cur为左子树,将该结点作为parent的新的右节点,并返回根结点即可。
如果遍历完成,仍未找到比val值小的结点,则构造一个新的结点以val为值,将该结点作为parent的右节点并返回根结点即可。
Python实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def insertIntoMaxTree(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
parent, cur = None, root
while cur:
if val > cur.val:
if not parent:
return TreeNode(val, root, None)
node = TreeNode(val, cur, None)
parent.right = node
return root
else:
parent = cur
cur = cur.right
parent.right = TreeNode(val)
return root
Java实现
/**
* 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 {
public TreeNode insertIntoMaxTree(TreeNode root, int val) {
TreeNode parent = null, cur = root;
while (cur != null) {
if (val > cur.val) {
if (parent == null) {
return new TreeNode(val, root, null);
}
TreeNode node = new TreeNode(val, cur, null);
parent.right = node;
return root;
} else {
parent = cur;
cur = cur.right;
}
}
parent.right = new TreeNode(val);
return root;
}
}
C++实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* insertIntoMaxTree(TreeNode* root, int val) {
TreeNode* parent = nullptr;
TreeNode* cur = root;
while (cur) {
if (val > cur->val) {
if (!parent) {
return new TreeNode(val, root, nullptr);
}
TreeNode* node = new TreeNode(val, cur, nullptr);
parent->right = node;
return root;
} else {
parent = cur;
cur = cur->right;
}
}
parent->right = new TreeNode(val);
return root;
}
};