题解 | #二叉树的前序遍历#

二叉树的前序遍历

https://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635

import java.util.*;
/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    public int[] preorderTraversal(TreeNode root) {
        // write code here
        // 使用 数组存储遍历的结果集
        List<Integer> list = new ArrayList<>();
        // 使用栈来存储节点
        Stack<TreeNode> stackNode = new Stack<>();
        stackNode.push(root);
        TreeNode temp;
        while (!stackNode.empty()) {
            temp = stackNode.pop();
            while (temp != null) {
                list.add(temp.val);
                if (temp.right != null) {
                    // 存在右孩子就先存储起来
                    stackNode.push(temp.right);
                }
                temp = temp.left; // 寻找左孩子
            }
        }
        int len = list.size();
        int[] res = new int[len];
        for (int i = 0; i < len; i++) {
            res[i] = list.get(i);
        }
        return res;
    }
}

非递归版本的先序遍历,使用 stack 存储后面要访问的节点,一次遍历即可。

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务