二叉树的前后中(递归),层序遍历

2021-03-31  本文已影响0人  Alex1989

前序遍历

image.png
访问顺序
/**
     * 前序遍历 144
     * @param root
     * @return
     */
    public  List<Integer> preorderTraversal(TreeNode root) {//144 前序
        List<Integer> retList = new ArrayList<>();
        preorderTraversal(retList,root);
        return retList;
    }
    private  void preorderTraversal(List<Integer> retList, TreeNode root){
        if (root != null) {
            retList.add(root.val);
            preorderTraversal(retList,root.left);
            preorderTraversal(retList,root.right);
        }
    }

中序遍历

image.png
访问顺序
/**
     * 中序遍历 94
     * @param root
     * @return
     */
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> retList = new ArrayList<>();
        inorderTraversal(retList, root);
        return retList;
    }

    private void inorderTraversal(List<Integer> retList, TreeNode root) {
        if (root != null) {
            inorderTraversal(retList, root.left);
            retList.add(root.val);
            inorderTraversal(retList, root.right);
        }
    }

后序遍历

image.png
访问顺序
/**
     * 后序遍历 145
     * @param root
     * @return
     */
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> retList = new ArrayList<>();
        postorderTraversal(retList, root);
        return retList;
    }
    private void postorderTraversal(List<Integer> retList, TreeNode root) {
        if (root != null) {
            postorderTraversal(retList, root.left);
            postorderTraversal(retList, root.right);
            retList.add(root.val);
        }
    }

层序遍历(队列方案,FIFO先进先出)

image.png
按照二叉树的层序遍历即可
/**
     * 层序遍历 102
     * @param root
     * @return
     */
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> retList = new ArrayList<>();
        if (root == null) return retList;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            List<Integer> valList = new ArrayList<>();
            Queue<TreeNode> tmpQueue = new LinkedList<>();
            while (!queue.isEmpty()) {
                TreeNode tmpNode = queue.poll();
                valList.add(tmpNode.val);
               if (tmpNode.left != null) {
                   tmpQueue.offer(tmpNode.left);
               }
               if (tmpNode.right != null) {
                   tmpQueue.offer(tmpNode.right);
               }
            }
            retList.add(valList);
            queue = tmpQueue;
        }
        return retList;
    }
上一篇 下一篇

猜你喜欢

热点阅读