leetcode 701.二叉搜索树的插入操作 (迭代法)

题目描述

在这里插入图片描述
简单来说就是平衡二叉树插入一个节点。在这里大家明确一个关键点,采用不重构二叉树的做法即每次将节点当作新的叶子节点插入,例如上图里的最后一种方法作为根节点插入确实不是很容易,因为涉及到了二叉树的重构,这个难度就比较大了,我第一次以为是平衡二叉树的插入节点,一直在想插入一个节点树都要重构了。
这道题目选择迭代法原因是因为迭代法的思路比较传统,很清晰
说白了就是不断地判断比较进行查找到需要插入的位置,具体的在代码里面

代码实现

重要的说三遍,打印调试信息是最快的判断错误的方法可以节约很多时间,我之前就用眼睛看最多画图手动模拟,又慢又容易出错

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值