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);
}
}
}
樹的遍歷(先序/中序/後序/層次)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.