隐藏用户y 2024-06-24 10:32 采纳率: 64.9%
浏览 0
已结题

JavaScript迭代方法前序遍历二叉树相关问题

对比代码2,代码1存在的问题以及解决方式

//代码1
var preorderTraversal = function (root) {
    if (!root) return;//若当前结点为空停止继续遍历
    const stack = [root];
    const res = [];
    //只传递一个参数使用闭包保存结果
    const preOrder = function (root) {
        // 使用cur变量临时保存栈弹出元素
        let cur = null;
        while (stack.length) {
            cur = stack.pop();
            res.push(cur.val);
            // 模拟出入栈过程,前序遍历是根左右,需要右先进栈才能右后出栈
            cur.right && stack.push(cur.right);
            cur.left && stack.push(cur.left);
        }
    }
    preOrder(root);
    return res;
};
//代码2
var preorderTraversal = function(root, res = []) {
    if(!root) return res;
    const stack = [root];
    let cur = null;
    while(stack.length) {
        cur = stack.pop();
        res.push(cur.val);
        cur.right && stack.push(cur.right);
        cur.left && stack.push(cur.left);
    }
    return res;
};


  • 写回答

3条回答 默认 最新

  • 隐藏用户y 2024-06-24 10:46
    关注

    第一句如果当前结点为空,停止继续遍历可以修改为return res。
    在此之前需要定义res,正确通过测试用例的代码如下,另外可以考虑将结果数组res作为参数传递,允许用户在调用函数时提供一个已经存在的数组,这可以提高代码的灵活性和性能。
    在函数内部初始化了结果数组res,这意味着每次调用函数时都会创建一个新的数组,这在某些情况下可能会影响性能,尤其是当树很大时。

    
    //  迭代方法前序遍历二叉树
    var preorderTraversal = function (root) {
        //定义res数组用来保存遍历结果
        const res = [];
        //若当前结点为空停止继续遍历
        if (!root) return res;
        // 定义一个数组模拟出入栈行为,站内元素初始化为root
        const stack = [root];
        //只传递一个参数使用闭包保存结果
        const preOrder = function (root) {
            // 使用cur变量临时保存栈弹出元素
            let cur = null;
            while (stack.length) {
                cur = stack.pop();
                res.push(cur.val);
                // 模拟出入栈过程,前序遍历是根左右,需要右先进栈才能右后出栈
                cur.right && stack.push(cur.right);
                cur.left && stack.push(cur.left);
            }
        }
        preOrder(root);
        return res;
    };
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月2日
  • 已采纳回答 6月24日
  • 创建了问题 6月24日

悬赏问题

  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?