LeetCode-二叉树非递归前序遍历

问题描述:

Given a binary tree, return the preorder traversal of its nodes’ values.

For example:
Given binary tree{1,#,2,3},

1
2
3
4
5
1
\
2
/
3

return[1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?

使用非递归的方法前序遍历二叉树。

问题分析

前序遍历就是按照中、左、右的顺序对二叉树进行遍历。

思路很简单,如果当前节点不为空,不断遍历当前节点的左子树,如果当前节点有右子树的话,将其放入栈中以便后期遍历其右子树,如果当前节点为空,则取出栈顶元素按照同样的方式遍历其右子树。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.postorder.raversal;

import java.util.ArrayList;
import java.util.Stack;

/**
* @author zhulongkun20@163.com
* @since 2018/11/17 下午3:16
*/
public class PreOrderSolution {
public ArrayList<Integer> preorderTraversal(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode pointer = root;
while (pointer != null || !stack.isEmpty()) {
while (pointer != null) {
list.add(pointer.val);
if (pointer.right != null) {
stack.push(pointer);
}
pointer = pointer.left;
}
if (stack.isEmpty()) {
break;
}
pointer = stack.pop();
pointer = pointer.right;
}
return list;
}
}

牛客网做得还不错,就是现在还是只支持 C++ 和 Java。