LeetCode之前序迭代遍历

问题描述:

/**
 * Given a binary tree, return the preorder traversal of its nodes' values.
 *
 * For example:
 * Given binary tree {1,#,2,3},
 *  1
 *   \
 *    2
 *   /
 *  3
 * return [1,2,3].
 *
 * Note: Recursive solution is trivial, could you do it iteratively?
 * 
 */

前序迭代遍历和后序遍历一个套路,如果有左孩子的话,先优先往栈里压左孩子,没有左孩子时,把这个节点弹出来,再压入右孩子,然后重复上述过程。代码如下:

public static ArrayList<Integer> preorderTraversal(TreeNode root){
        ArrayList<Integer> ret = new ArrayList<Integer>();
        if(root==null)
            return ret;
        Stack<TreeNode>st=new Stack<TreeNode>();
        TreeNode p=root.left;
        ret.add(root.val);
        st.add(root);
        while(!st.isEmpty())
        {
            while(p!=null)
            {
                ret.add(p.val);
                st.add(p);
                p=p.left;
            }
            TreeNode node=st.pop();
            p=node.right;
            if(p!=null){
                ret.add(p.val);
                st.add(p);
                p=p.left;
            }
        }
        return ret;
    }
    //测试代码
            public static void main(String arg[])
            {
                TreeNode r1 = new TreeNode(3);  
                TreeNode r2 = new TreeNode(9);  
                TreeNode r3 = new TreeNode(20);  
                TreeNode r4 = new TreeNode(15);
                TreeNode r5 = new TreeNode(7);
                TreeNode r6 = new TreeNode(10);
                r1.left = r2;  
                r1.right = r3;  
                r2.left=r4;
                r3.right=r5;
                r3.left=r6;
                ArrayList<Integer> array=preorderTraversal(r1);
                for(int i=0;i<array.size();i++)
                {
                    System.out.print(array.get(i)+",");
                }

            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值