【每日一题】144. 二叉树的前序遍历

【😀每日一题😀】144. 二叉树的前序遍历

给定一个二叉树,返回它的 前序 遍历

解法

  • 递归

    前序遍历的规则是根左右

    首先我们添加将根节点加入到集合中,然后再分别对左子树和右子树进行递归

    	List<Integer> res = new ArrayList<>();
        public List<Integer> preorderTraversal(TreeNode root) {
            //前序遍历 根左右
            if(root == null) return res;
            res.add(root.val);
            if(root.left != null) preorderTraversal(root.left);
            if(root.right != null) preorderTraversal(root.right);
            return res;
        }
    
  • 迭代

    进行递归的时候有虚拟机的隐性栈的帮助,在迭代中需要我们借助一个实体栈

    栈的特性是后进先出 所以我们在迭代的时候首先将右子树压入栈中,因为这样后入栈的左子树会首先出栈

    	List<Integer> res = new AArrayList<>();
    	public List<Integer> preorderTraversal(TreeNode root){
            if(root == null) return res;
            Stack<TreeNode> stack = new Stack<>();
            stack.push(root);
            while(!stack.isEmpty()){
                TreeNode pop = stack.pop();
                res.add(pop.val);
                if(root.right != null) stack.push(stack.right);
                if(root.left != null) stack.push(stack.left);
            }
            return res;
        }
    
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页