樹的遍歷(先序/中序/後序/層次)

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

class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x){
        val = x;
    }
}

public class Tree {
    public static void main(String[] args) {
        TreeNode t = new TreeNode(1);
        t.left = new TreeNode(2);
        t.right = new TreeNode(3);
        t.left.left = new TreeNode(5);

        System.out.println("樹的先序遍歷:");
        preOrder(t);
        System.out.println("樹的中序遍歷:");
        inOrder(t);
        System.out.println("樹的後序遍歷:");
        postOrder(t);
        System.out.println("樹的層次遍歷:");
        levelOrder(t);
    }

    //先序遍歷  中左右
    public static void preOrder(TreeNode treeNode){
        if (treeNode == null){
            return;
        }
        System.out.println(treeNode.val);
        preOrder(treeNode.left);
        preOrder(treeNode.right);
    }

    //中序遍歷  左中右
    public static void inOrder(TreeNode treeNode){
        if (treeNode == null){
            return;
        }
        inOrder(treeNode.left);
        System.out.println(treeNode.val);
        inOrder(treeNode.right);
    }

    //後序遍歷  左右中
    public static void postOrder(TreeNode treeNode){
        if (treeNode == null){
            return;
        }
        postOrder(treeNode.left);
        postOrder(treeNode.right);
        System.out.println(treeNode.val);

    }

    //層次遍歷
    public static void levelOrder(TreeNode treeNode){
        if (treeNode == null){
            return;
        }
        //用來保存遍歷的節點
        List<TreeNode> treeNodes = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(treeNode);
        while (!queue.isEmpty()){
            TreeNode head = queue.poll();
            if (head.left != null){
                queue.offer(head.left);
            }
            if (head.right != null){
                queue.offer(head.right);
            }
            treeNodes.add(head);
        }
        for (TreeNode node:treeNodes){
            System.out.println(node.val);
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章