二叉树的前序遍历

递归写法

public int[] preorderTraversal (TreeNode root) {
        // write code here
        List<Integer> list=new ArrayList<Integer>();
        dfs(list,root);
        int[] res=new int[list.size()];
        for (int i=0;i<list.size();i++){
            res[i]=list.get(i);
        }
        return res;
    }
    public void dfs(List<Integer> list,TreeNode root){
        if(root==null) return;
        list.add(root.val);
        dfs(list,root.left);
        dfs(list,root.right);
    }

非递归写法 前序遍历使用栈,但栈是先进后出,所以需要先使右节点进栈。 之后进行遍历。

 public int[] preorderTraversal (TreeNode root) {
        // write code here
        if(root==null) return new int[0];
        Deque<TreeNode> stack=new LinkedList<TreeNode>();
        List<Integer> list=new ArrayList<Integer>();
        stack.push(root);
        while (!stack.isEmpty()){
            TreeNode node=stack.pop();
            list.add(node.val);
            if(node.right!=null){
                stack.push(node.right);
            }
            if(node.left!=null){
                stack.push(node.left);
            }
        }
        int[] res=new int[list.size()];
        for (int i=0;i<list.size();i++){
            res[i]=list.get(i);
        }
        return res;
    }


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务