题目来源于 LeetCode 上第 144号(Binary Tree Preorder Traversal)问题:二叉树的前序遍历。题目难度为 Medium。
题目地址: https://leetcode.com/problems/binary-tree-preorder-traversal/
题目描述
Given a binary tree, return the preorder traversal of its nodes' values.
给定一个二叉树,返回其节点值的前序遍历
- Input: [1,null,2,3]
- 1
- \
- 2
- /
- 3
- Output: [1,2,3]
- 复制代码
二叉树的前序遍历过程: 根节点 -> 左子树 -> 右子树,图下图所示:
结果为: 4 2 1 3 6 5 7
题目解析:
- 循环检测栈是否为空,或者根节点是否为空
- 循环检测左节点,保存到栈中
- 当左节点遍历结束之后,取出栈顶的右节点,再次执行步骤2
- class Solution {
-
- /**
- * 前序遍历
- * @param root 根节点
- * @return 前序遍历的集合
- */
- public List<Integer> preorderTraversal(TreeNode root) {
- Stack<TreeNode> stack = new Stack();
- List<Integer> list = new LinkedList();
-
- /**
- * 步骤1
- * 循环检测栈是否为空,或者根节点是否为空
- */
- while(!stack.isEmpty() || root!=null){
-
- /**
- * 步骤2
- * 循环检测左节点,保存到栈中
- */
- while(root!=null){
- stack.push(root);
- list.add(root.val);
- root = root.left;
- }
-
- /**
- * 步骤3
- * 取出栈顶的右节点,再次执行步骤2
- */
- if(!stack.isEmpty()){
- root = stack.pop().right;
- }
- }
- return list;
- }
-
- }
- 复制代码