【java】代码实现:二叉树的先序遍历、中序遍历、后序遍历、层序遍历

一、节点类

public class Node {
    public Node left = null;
    public Node right = null;
    public int i;
    
    public Node(int i) {
        this.i = i;
    }
}

二、创建对象

public class NodeUtils {
	public static Node newNode(){
        Node node = new Node(1);
        Node n2 = new Node(2);
        Node n3 = new Node(3);
        Node n4 = new Node(4);
        Node n5 = new Node(5);
        Node n6 = new Node(6);
        Node n7 = new Node(7);
        Node n8 = new Node(8);
        Node n9 = new Node(9);
        Node n10 = new Node(10);
        node.left = n2;
        node.right = n3;
        n2.right = n4;
        n3.left = n5;
        n3.right = n6;
        n4.left = n7;
        n5.right = n8;
        n6.left = n9;
        n9.right= n10;
        return node;
	}
}

在这里插入图片描述

三、先序遍历(递归)

遍历规则:中左右
结果应该是:1、2、4、7、3、5、8、6、9、10

public class Main {
	public static void main(String[] args){
		List<Interger> list = new ArrayList<>();	// 存储结果
		Node node = NodeUtils.newNode();	// 获取 node 对象
		fun(node, list);	// 执行
        for (Integer i : list)
            System.out.println(i);	// 输出验证
	}

	public static void fun(Node node, List<Integer> list){
		list.add(node.i);
		if(node.left != null) fun(node.left, list);
		if(node.right != null) fun(node.right, list);
	}
}

四、中序遍历(递归)

遍历规则:左中右
结果应该是:2、7、4、1、5、8、3、9、10、6

public class Main {
	public static void main(String[] args){
		List<Interger> list = new ArrayList<>();	// 存储结果
		Node node = NodeUtils.newNode();	// 获取 node 对象
		fun(node, list);	// 执行
        for (Integer i : list)
            System.out.println(i);	// 输出验证
	}

	public static void fun(Node node, List<Integer> list){
		if(node.left != null) fun(node.left, list);
		list.add(node.i);
		if(node.right != null) fun(node.right, list);
	}
}

五、后序遍历(递归)

遍历规则:左右中
结果应该是:7、4、2、8、5、10、9、6、3、1

public class Main {
	public static void main(String[] args){
		List<Interger> list = new ArrayList<>();	// 存储结果
		Node node = NodeUtils.newNode();	// 获取 node 对象
		fun(node, list);	// 执行
        for (Integer i : list)
            System.out.println(i);	// 输出验证
	}

	public static void fun(Node node, List<Integer> list){
		if(node.left != null) fun(node.left, list);
		if(node.right != null) fun(node.right, list);
		list.add(node.i);
	}
}

六、层序遍历(队列)

遍历规则:一层一层
结果应该是:1、2、3、4、5、6、7、8、9、10

java:

public class Main {
	public static void main(String[] args) {
		Node node = NodeUtils.newNode();	// 获取 node 对象
		List<Interger> list = fun(node);	// 执行
        for (Integer i : list) {
            System.out.println(i);	// 输出验证
        }
	}

	public static List<Integer> fun(Node node){
		List<Integer> list = new ArrayList<>();
		if (node != null) {
		    Queue<Node> queue = new LinkedList<>();
			queue.add(node);
			do {
				Node first = queue.remove();
				list.add(first .i);
				if(first.left != null) queue.add(first.left);
				if(first.right != null) queue.add(first.right);
			} while(!queue.isEmpty());
		}
		return list;
	}
}

kotlin:

object Main {
  @JvmStatic
  fun main(arg: Array<String>) {
    val node = NodeUtils.newNode()
    process(node).forEach { println(it) }
  }

  fun process(node: Node?): List<Int> {
    node ?: return emptyList()
    val list = mutableListOf<Int>()
    val queue = LinkedList<>().apply { add(node) }
    do {
      queue.remove().apply {
        list.add(i)
        left?.let { queue.add(it) }
        right?.let { queue.add(it) }
      }
    } while(queue.isNotEmpty())
  }
}