题目来源于 LeetCode 上第 144号(Binary Tree Preorder Traversal)问题:二叉树的前序遍历。题目难度为 Medium。node
题目地址: https://leetcode.com/problems/binary-tree-preorder-traversal/面试
Given a binary tree, return the preorder traversal of its nodes' values.数组
给定一个二叉树,返回其节点值的前序遍历bash
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,2,3]
复制代码
二叉树的前序遍历过程: 根节点 -> 左子树 -> 右子树,以下图所示:post
结果为: 4 2 1 3 6 5 7ui
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;
}
}
复制代码
class Solution {
List<Integer> list = new LinkedList();
public List<Integer> preorderTraversal(TreeNode root) {
if (root == null) return list;
list.add(root.val);
preorderTraversal(root.left);
preorderTraversal(root.right);
return list;
}
}
复制代码