5-3 非递归写法

来源:5-3 二分搜索树的节点插入

慕运维2948618

2022-04-06

void insert(Key key, Value value){
        if(root==null){
            root = new Node(key, value);
            count++;
            return;
        }
        Node* current = root;
        while(true){
            if(key > current->key){
                if(current->right == null){
                    current->right = new Node(key, value);
                    count++;
                    return;
                }
                else
                    current = current->right;
            }else if(key < current->key){
				if(current->left == null){
                    current->left = new Node(key, value);
                    count++;
                    return;
                }
                else
                    current = current->left;
            }else{
                current->value = value;
                return;
            }
        }
    }

首先想到的是非递归写法,老师上课讲的递归写法很神奇,要是我肯定想不出来。
我这样写有问题吗?写得感觉有点啰嗦,老师有什么巧妙的非递归写法吗?

写回答

1回答

liuyubobobo

2022-04-07

没有问题。


之所以觉得啰嗦,是因为你看到了递归写法有多“简洁”。而这恰恰就是递归的优点。代码简洁不仅仅意味着代码行数的“少”,更意味着思维上更容易。对于很多问题,尤其是本身依附于有递归结构的问题上,使用递归去思考,本身就是更容易的。


这点你接触的和递归有关的问题越多,体会将越深。一旦你深刻掌握了递归,在很多时候,你应该会更愿意写递归方法才对:)


继续加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程