1 中序遍历
(1)递归
public static void indiSort(TreeNode head) {
if (head == null) {
return;
}
indiSort(head.left);
System.out.println(head.val);
indiSort(head.right);
}
(2) 非递归
public static void indiSort1(TreeNode head) {
if (head == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
while (head != null || !stack.empty()) {
if (head != null) {
stack.push(head);
head = head.left;
} else {
head = stack.pop();
System.out.println(head.val);
head = head.right;
}
}
}
2 前序遍历
(1) 递归
public static void preSort(TreeNode head) {
if (head != null) {
return;
}
System.out.println(head.val);
preSort(head.left);
preSort(head.right);
}
(2) 非递归
public static void preSort1(TreeNode head) {
if (head == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(head);
while (!stack.empty()) {
TreeNode temp = stack.pop();
System.out.println(temp.val);
if (temp.right != null) {
stack.push(temp.right);
}
if (temp.left != null) {
stack.push(temp.left);
}
}
}
3 后序遍历
(1) 递归
public static void postSort(TreeNode head) {
if (head == null) {
return;
}
postSort(head.left);
postSort(head.right);
System.out.println(head.val);
}
(2)非递归
public static void postSort1(TreeNode head) {
if (head == null) {
return;
}
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
stack1.push(head);
while (!stack1.empty()) {
TreeNode temp = stack1.pop();
stack2.push(temp);
if (temp.left != null) {
stack1.push(temp.left);
}
if (temp.right != null) {
stack1.push(temp.right);
}
}
while (!stack2.empty()) {
System.out.println(stack2.pop().val);
}
}
4 宽度优先遍历
按层遍历(bfs)
public static void bfs(TreeNode head) {
if (head == null) {
return;
}
LinkedList<TreeNode> queue = new LinkedList<>();
queue.offer(head);
while (!queue.isEmpty()) {
TreeNode temp = queue.poll();
System.out.println(temp.val);
if (temp.left != null) {
queue.offer(temp.left);
}
if (temp.right != null) {
queue.offer(temp.right);
}
}
5 深度优先遍历
public static void dfs(TreeNode head) {
if (head == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
while (!stack.empty()) {
TreeNode temp = stack.pop();
System.out.println(temp.val);
if (temp.right != null) {
stack.push(temp.right);
}
if (temp.left != null) {
stack.push(temp.left);
}
}
}