树的遍历
时间:2019-08-31
本文章向大家介绍树的遍历,主要包括树的遍历使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 前序遍历:中左右
- 中序编列:左中右
- 后续编列:左右中
//前序遍历
public static void preOrder(Node node) {
if (node == null) {
return;
}
System.out.print(node.value);
preOrder(node.left);
preOrder(node.right);
}
//中序遍历
public static void inOrder(Node node) {
if (node == null) {
return;
}
inOrder(node.left);
System.out.print(node.value);
inOrder(node.right);
}
//后序遍历
public static void postOrder(Node node) {
if (node == null) {
return;
}
postOrder(node.left);
postOrder(node.right);
System.out.print(node.value);
}
/**
* 非递归实现
*/
//前序遍历
public static void preOrder02(Node node) {
Stack<Node> stack = new Stack<>();
while (node != null || !stack.isEmpty()) {
while (node != null) {
System.out.print(node.value);
stack.push(node);
node = node.left;
}
node = stack.pop().right;
}
}
//中序遍历
public static void inOrder02(Node node) {
Stack<Node> stack = new Stack<>();
while (node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node);
node = node.left;
}
node = stack.pop();
System.out.print(node.value);
node = node.right;
}
}
//后序遍历
public static void postOrder2(Node node) {
Stack<Node> stack = new Stack<Node>();
Stack<Integer> tag = new Stack<Integer>();
while (node != null || !stack.isEmpty()) {
if (node != null) {
stack.push(node);
tag.push(1); //第一次访问
node = node.left;
} else {
if (tag.peek() == 2) {
System.out.print(stack.pop().value);
tag.pop();
} else {
tag.pop();
tag.push(2); //第二次访问
node = stack.peek().right;
}
}
}
}
测试用例
//测试用例
public static void test(Node node) {
System.out.print("递归_前序排序:");
preOrder(node);
System.out.println();
System.out.print("前序排序:");
preOrder02(node);
System.out.println();
System.out.print("递归_中序遍历:");
inOrder(node);
System.out.println();
System.out.print("中序遍历:");
inOrder02(node);
System.out.println();
System.out.print("递归_后序排序:");
postOrder(node);
System.out.println();
System.out.print("后序排序:");
postOrder2(node);
System.out.println();
}
public static void main(String[] args) {
BST<Integer, Integer> bst = new BST<>();
bst.put(3, 3);
bst.put(2, 2);
bst.put(4, 4);
TreeOrder.test(bst.root);
}
输出
递归_前序排序:324
前序排序:324
递归_中序遍历:234
中序遍历:234
递归_后序排序:243
后序排序:243
原文地址:https://www.cnblogs.com/aiguozou/p/11440207.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法