二叉树遍历(栈)

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);

    }
}

  

posted @ 2024-03-27 14:20  dmfsimle  阅读(6)  评论(0)    收藏  举报