使用栈完成二叉树的前序遍历
什么是二叉树的前序遍历
二叉树的前序遍历,采用基本的遍历步骤: 中->左->右。
如下图,根节点为5, 前序遍历结果为 5->3->8->6->10
使用栈实现前序遍历
不使用递归,可以使用栈模拟前序遍历。我们研究一下执行步骤:
- 先读取5。
- 读取5的左子节点3,之后是5的右子节点8。
- 节点3没有左右子节点。
- 读取节点8的左节点6,8的右节点10。
我们可以使用栈模拟这个流程:
使用栈的工作流程
- 1) 压入root节点5。
- 2)如果栈不为空。
- 3)从栈中弹出数据5
-
- 如果节点5的右节点不为空,压入右节点
-
- 如果节点5的左节点不为空,压入左节点
- …
- 循环 从3)开始的步骤,直到栈为空结束。
力扣真题解析
参考实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if(root==null) return list;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode curr = stack.pop();
list.add(curr.val);
if (curr.right != null)
stack.push(curr.right);
if (curr.left != null)
stack.push(curr.left);
}
return list;
}
}