package binaryTree;
import java.util.*;
//定义二叉树的结点
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(){
}
public TreeNode(int val){
this.val = val;
}
public TreeNode(int val, TreeNode left, TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
}
public class CreatTree {
public static void main(String[] args) {
System.out.println("输入树的节点值(输入-1则终止):");
Scanner sc = new Scanner(System.in);
LinkedList<Integer> list = new LinkedList<>();
while(true){
int temp = sc.nextInt();
if(temp == -1){
break;
}else{
list.addLast(temp);
}
}
TreeNode root = create(list);
List<Integer> tree = traverse(root);
System.out.print("中序遍历结果:");
System.out.println(tree);
}
//(按先序递归)创建二叉树
public static TreeNode create(LinkedList<Integer> list){
if(list==null||list.size()==0){
return null;
}
TreeNode node = null;
int data = list.removeFirst();
if(data!=0){
node = new TreeNode(data);
node.left = create(list);
node.right = create(list);
}
return node;
}
//非递归中序遍历
public static List<Integer> traverse(TreeNode root){
List<Integer> list = new ArrayList<>();
if(root == null){
return list;
}
Deque<TreeNode> stack = new LinkedList<>();
TreeNode cur = root;
while(cur!=null||!stack.isEmpty()){
if(cur!=null){
stack.push(cur);
cur = cur.left;
}else{
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
}
return list;
}
}
测试案例: