一、构造树
package Initialize;
public class TreeNode<T>{
public T value;
public TreeNode<T> left;
public TreeNode<T> right;
public TreeNode(T val){
this.value = val;
}
public TreeNode(){}
//输入参数9个节点
public TreeNode<T> iniTree(T data[]){
TreeNode<T> node = new TreeNode<T>(data[0]);
node.left = new TreeNode<T>(data[1]);
node.right = new TreeNode<T>(data[2]);
node.left.left = new TreeNode<T>(data[3]);
node.left.right = new TreeNode<T>(data[4]);
node.right.left = new TreeNode<T>(data[5]);
node.right.right = new TreeNode<T>(data[6]);
node.left.left.left = new TreeNode<T>(data[7]);
node.left.left.right = new TreeNode<T>(data[8]);
return node;
}
}
二、 三种遍历算法
package Solutions;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import Initialize.TreeNode;
public class Solution1 {
public static void main(String[] args) {
Integer[] data = {12,11,43,14,89,13,98,65,47};
TreeNode<Integer> node = new TreeNode<Integer>();
node = node.iniTree(data);
System.out.print("前序遍历:");
new Solution1().PreOrder(node);
System.out.println();
System.out.print("中序遍历:");
new Solution1().InOrder(node);
System.out.println();
System.out.print("层序遍历:");
new Solution1().LevelSort(node);
}
/*
* 非递归方法前序遍历
*/
public void PreOrder(TreeNode<Integer> node){
TreeNode<Integer> p = node;
Stack<TreeNode<Integer>> stack = new Stack<TreeNode<Integer>>();
while(p != null || !stack.isEmpty()){
while(p!=null){
System.out.print(p.value+" ");
stack.push(p);
p = p.left;
}
if(!stack.isEmpty()){
p = stack.pop();
p = p.right;
}
}
}
/*
* 非递归方法中序遍历
*/
public void InOrder(TreeNode<Integer> node){
TreeNode<Integer> p = node;
Stack<TreeNode<Integer>> stack = new Stack<TreeNode<Integer>>();
while(p != null || !stack.isEmpty()){
while(p!=null){
stack.push(p);
p = p.left;
}
if(!stack.isEmpty()){
p = stack.pop();
System.out.print(p.value+" ");
p = p.right;
}
}
}
/*
* 非递归方法层序遍历
*/
public void LevelSort(TreeNode<Integer> node){
TreeNode<Integer> p = node;
Queue<TreeNode<Integer>> queue = new LinkedList<TreeNode<Integer>>();
queue.add(p);
while(p != null && !queue.isEmpty()){
p = queue.remove();
System.out.print(p.value+" ");
if(p.left != null){
queue.add(p.left);
}
if(p.right != null){
queue.add(p.right);
}
}
}
}