目录
前言
结点的封装与有序二叉树的构建:
实现
结点类名称:TreeNode
结点类中的数据
private TreeNode leftTreeNode;
private TreeNode rightTreeNode;
private Integer value;
递归前中后序遍历
/**
* 深度优先遍历遍历树:
* <p>
* 先序遍历
* 中序遍历
* 后序遍历
*/
public void beforeOrder(TreeNode node) {
if (node == null) {
return;
}
System.out.println(" " + node.getValue() + " ");
beforeOrder(node.getLeftTreeNode());
beforeOrder(node.getRightTreeNode());
}
public void inOrder(TreeNode node) {
if (node == null) {
return;
}
inOrder(node.getLeftTreeNode());
System.out.println(" " + node.getValue() + " ");
inOrder(node.getRightTreeNode());
}
public void afterOrder(TreeNode node) {
if (node == null) {
return;
}
afterOrder(node.getLeftTreeNode());
afterOrder(node.getRightTreeNode());
System.out.println(" " + node.getValue() + " ");
}
非递归中序遍历
//中序遍历,非递归
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if (root != null) {
Stack<TreeNode> stack = new Stack<TreeNode>();
while (!stack.isEmpty() || root != null) {
if (root != null) {
stack.push(root);
root = root.getLeftTreeNode();
} else {
root = stack.pop();
list.add(root.getValue());
root = root.getRightTreeNode();
}
}
}
return list;
}
编写测试类
package com.mine.tree;
public class Test {
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
bt.insertDiGui(bt.root,5);
bt.insertDiGui(bt.root,7);
bt.insertDiGui(bt.root,4);
bt.insertDiGui(bt.root,2);
bt.insertDiGui(bt.root,0);
bt.insertDiGui(bt.root,3);
System.out.println("》=============================前序遍历(递归)");
bt.beforeOrder(bt.root);
System.out.println("》=============================中序遍历(递归)");
bt.inOrder(bt.root);
System.out.println("》=============================后序遍历(递归)");
bt.afterOrder(bt.root);
System.out.println("》=============================中序遍历(非递归)");
bt.inorderTraversal(bt.root);
}
}
结果