题解 | #二叉树的前序遍历#
二叉树的前序遍历
https://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635
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整型一维数组
*/
private List<Integer> valueList = new ArrayList<>();
private Stack<TreeNode> stack = new Stack<>();
private TreeNode root = new TreeNode(1);
public void createBiTree() {
TreeNode node1 = new TreeNode(2);
root.right = node1;
TreeNode node2 = new TreeNode(3);
node1.left = node2;
}
public TreeNode getRoot() {
return root;
}
public int[] preorderTraversal (TreeNode root) {
preorderTraversalByLoop(root);
//preOrderTraversalRecursively(root);
return valueList.stream().mapToInt(i->i).toArray();
}
private void preorderTraversalByLoop (TreeNode node) {
// write code here
stack.push(node);
while(!stack.empty()) {
node = stack.pop();
while(null != node) {
//调用结点的操作函数
appendNode(node);
if(null != node.right) {
//如果该结点有右孩子,右孩子进栈
stack.push(node.right);
}
//一直指向根结点最后一个左孩子
node = node.left;
}
}
}
private void preOrderTraversalRecursively(TreeNode node){
if (null != node) {
appendNode(node);//调用操作结点数据的函数方法
preOrderTraversalRecursively(node.left);//访问该结点的左孩子
preOrderTraversalRecursively(node.right);//访问该结点的右孩子
}
//如果结点为空,返回上一层
return;
}
public void appendNode(TreeNode node) {
System.out.println("node value=" + node.val);
valueList.add(node.val);
}
public static void main(String[] args) {
Solution solution = new Solution();
solution.createBiTree();
solution.preorderTraversal(solution.getRoot());
}
}