二叉树的遍历

二叉树的遍历

二叉树的前序,中序,后序,层序遍历

package 剑指offer;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author WangXiaoeZhe
 * @Date: Created in 2019/11/22 18:11
 * @description:
 */

public class Main17 {

    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }

    }
    ArrayList<Integer> resultList = new ArrayList<>();
    /**
     * 前序遍历:ABDEC
     * 1.首先遍历左子树,遍历到叶子结点为止
     * @return
     * */

    public boolean preorderTraverse(TreeNode node) {
        //首先从根节点开始遍历
        resultList.add(node.val);
        if (node.left != null) {
            preorderTraverse(node.left);
        }
        if (node.right != null) {
            preorderTraverse(node.right);
        }
        return true;
    }

    /**
     * 中序遍历:DBEAC
     * @return
     *
     * */

    public boolean inorderTarverse(TreeNode node) {
        if (node.left != null) {
            inorderTarverse(node.left);
        }
        resultList.add(node.val);
        if (node.right != null) {
            inorderTarverse(node.right);
        }
        return true;
    }

    /**
     * 后序遍历:DEBCA
     * @return
     *
     * */

    public boolean postorderTarverse(TreeNode node) {
        if (node.left != null) {
            postorderTarverse(node.left);
        }
        if (node.right != null) {
            postorderTarverse(node.right);
        }
        resultList.add(node.val);
        return true;
    }

    /**
     * 层序遍历
     *
     * @param root
     * @return
     */


    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {

        if (root == null) {
            return resultList;
        }
        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        while (!q.isEmpty()) {
            TreeNode nowNode = q.peek();
            q.poll();
            resultList.add(nowNode.val);
            if (nowNode.left != null) {
                q.add(nowNode.left);
            }
            if (nowNode.right != null) {
                q.add(nowNode.right);
            }
        }

        return resultList;
    }


}
posted @ 2019-11-22 18:35  π。  阅读(216)  评论(0编辑  收藏  举报