leetcode 94. 二叉树的中序遍历(Java 二叉树中序非递归遍历)

leetcode 94. 二叉树的中序遍历(Java 二叉树中序非递归遍历)

很久没写算法,一个水题竟然写了好久
class TreeNode
{
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x)
    {
        val = x;
    }
}

/**
 * 二叉树非递归中序遍历思路
 * 本质其实是类似于双指针
 * 一个指向前一个节点,另一个指向正在遍历的节点
 * 1)若其左孩子不为空,则将P入栈并将P的左孩子置为当前的P,然后对当前结点P再进行相同的处理;
 * 2)若其左孩子为空,则取栈顶元素并进行出栈操作,访问该栈顶结点,然后将当前的P置为栈顶结点的右孩子;
 * 3)直到P为NULL并且栈为空则遍历结束。
 */

class Solution
{
    List<Integer> data;
    public List<Integer> inorderTraversal(TreeNode root)
    {
        data=new ArrayList<>();
        Stack<TreeNode> temp=new Stack<>();

        TreeNode treeNode=root;
        while (treeNode!=null||!temp.empty())
        {
            /*
            * 当前节点入栈,treenode指向当前节点的left节点
            */
            while (treeNode!=null)
            {
                temp.push(treeNode);
                treeNode=treeNode.left;
            }

            //
            if (!temp.empty())
            {
                treeNode=temp.pop();
                data.add(treeNode.val);
                treeNode=treeNode.right;
            }

        }
        return data;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值