题目描述
简单来说就是平衡二叉树插入一个节点。在这里大家明确一个关键点,采用不重构二叉树的做法即每次将节点当作新的叶子节点插入,例如上图里的最后一种方法作为根节点插入确实不是很容易,因为涉及到了二叉树的重构,这个难度就比较大了,我第一次以为是平衡二叉树的插入节点,一直在想插入一个节点树都要重构了。
这道题目选择迭代法原因是因为迭代法的思路比较传统,很清晰
说白了就是不断地判断比较进行查找到需要插入的位置,具体的在代码里面
代码实现
重要的说三遍,打印调试信息是最快的判断错误的方法可以节约很多时间,我之前就用眼睛看最多画图手动模拟,又慢又容易出错
class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if(root == nullptr)
{ // 为空 直接赋值返回其
TreeNode* root = new TreeNode(val);
return root;
}
TreeNode* cur = root; // 设置临时变量,为了不改变root的指向
TreeNode* insert_node = new TreeNode(val); // 待插入节点
while(cur)
{ // 当前节点的值大于val 向左找
if(cur->val > val)
{ // 当前节点左为空 即找到
if(!cur->left)
{ // 赋值返回
cur->left = insert_node;
return root;
}
// 没找到 继续找
cur = cur->left;
}
// 与上面一样 只不过换右边了
if(cur->val < val)
{
if(!cur->right)
{
cur->right = insert_node;
return root;
}
cout << cur->val << endl;
cur = cur->right;
}
}
return root;
}
};