题解 | #二叉树的前序遍历#

二叉树的前序遍历

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());
    }
}

全部评论

相关推荐

神哥不得了:神哥来啦~自我评价和校园经历的话可以直接删了,从大厂暑期的话应该没有什么太多问题,应该是能拿到很多大厂面试机会的,就是在面试的时候表示的好一点就行,可以在面试前先把高频top 50的八股多巩固几遍,千万不要看那些假高频八股,这两个项目的话问题不是很大,应该能够帮你找到大厂实习的,算法的话一定要刷起来,因为大厂有些还是比较看重算法的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务