题解 | #二叉树的前序遍历#
二叉树的前序遍历
http://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635
非递归模式:
linkedList
可以做 栈 来使用
假如有棵树:
步骤如下:
- A 入栈
- A 出栈
- 检查 A 的左孩子和右孩子是否存在
- 存在,先放入右孩子,再放入左孩子
- 左孩子出栈
- 右孩子出栈
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
*/
public int[] preorderTraversal (TreeNode root) {
// 结果集合
ArrayList<Integer> arr = new ArrayList();
if(root == null) {
return new int[0];
}
TreeNode current;
// LinkedList 当作栈来使用
LinkedList<TreeNode> list = new LinkedList<TreeNode>();
list.addFirst(root);
while(!list.isEmpty()) {
current = list.removeFirst();
arr.add(current.val);
if(current.right != null) {
list.addFirst(current.right);
}
if(current.left != null) {
list.addFirst(current.left);
}
}
// 循环赋值。
int[] res = new int[arr.size()];
for(int i = 0; i < arr.size(); i++) {
res[i] = arr.get(i);
}
return res;
}
}
递归模式
直接看代码
public void perTree(TreeNode root) {
if(root == null) {
return;
}
System.out.println("当前的节点值:" + root.val);
perTree(root.left);
perTree(root.right);
}