二叉树遍历

2022-05-06  本文已影响0人  奋斗的韭菜汪

前序遍历 pre-order:中左右
中序遍历 in-order:左中右(遍历后有序)
后续遍历 post-order:左右中

1、万金油写法,利用递归,时候前、中、后序遍历
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        if(root == null){
            return new ArrayList();
        }
        List<Integer> leftNode = inorderTraversal(root.left);
        List<Integer> rightNode = inorderTraversal(root.right);

        List<Integer> result = new ArrayList();
        // 前序遍历
        result.add(root.val);
        result.addAll(leftNode);
        result.addAll(rightNode);

        // 中序遍历
        //result.addAll(leftNode);
        //result.add(root.val);
        //result.addAll(rightNode);

        // 后序遍历
        //result.addAll(leftNode);
        //result.addAll(rightNode);
        //result.add(root.val);
        return result;
    }
}
非递归实现,使用栈
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList();
        if(root == null){
            return result;
        }
        
        Stack<TreeNode> stack = new Stack();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode node = stack.pop();
            result.add(node.val);
            //前序遍历,栈先进后出,这里要先放右节点,后方左节点
            if (node.right != null){
                stack.push(node.right);
            }
            if (node.left != null){
                stack.push(node.left);
            }
        }
        return result;
        
    }
}
上一篇下一篇

猜你喜欢

热点阅读