public class MyTree2 {
private static class TreeNode{
int data;
TreeNode leftChild;
TreeNode rightChild;
TreeNode(int data){
this.data=data;
}
}
//创建二叉树
public static TreeNode createBinaryTree(LinkedList<Integer> inputlist){
TreeNode root=null;
if(inputlist == null || inputlist.isEmpty())return null;
Integer data=inputlist.removeFirst();
if(null!=data){
root=new TreeNode(data);
root.leftChild=createBinaryTree(inputlist);
root.rightChild=createBinaryTree(inputlist);
}
return root;
}
//二叉树前序遍历
public static void preOrderTraveralWithStack(TreeNode root){
Stack<TreeNode> stack =new Stack<TreeNode>();
TreeNode treeNode=root;
while (treeNode != null || !stack.isEmpty()){
//迭代访问节点的左孩子,并入栈
while (treeNode != null){
System.out.println(treeNode.data);
stack.push(treeNode);
treeNode=treeNode.leftChild;
}
//如果节点没有左孩子,则弹出栈顶节点,访问节点右孩子
if(!stack.isEmpty()){
treeNode = stack.pop();
treeNode= treeNode.rightChild;
}
}
}
public static void main(String[] args) {
LinkedList<Integer> inputList=new LinkedList<Integer>(
Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4})
);
TreeNode node=createBinaryTree(inputList);
preOrderTraveralWithStack(node);
}
}