Tree inorder iterator (带和不带parent pointer)

要求写一binary tree的 inorder interator.
但是这题跟以前见到的不太一样,这个给了一个parent pointer。
这样的话再用stack来做就不合适了。人家parent pointer都给你了, 你还说用stack不领情呀。
思路如下:
初始化的时候一路走到最左下角。
取值的时候返回当前结点上的值,当前结点为null时则返回null.
然后,由于是in order traversal,
1。 先判断这个点有没有右孩子。如果有孩子则把指针挪到右孩子的最左孩子。
2。 如果这个点没有右孩子。则我们要返回上一层了。
如果当前结点是它父亲的右孩子,则它的父亲也 是已经遍历过了,继续访问,直到当前结点不是它父亲的右孩子为止。

代码如下。

public class TreeNodeParent {

    int val;
    TreeNodeParent left, right, parent;

    public TreeNodeParent (int val) {
        this.val = val;
    }
}

class TreeIterator {
    TreeNodeParent node;
    public TreeIterator(TreeNodeParent root) {
        node = root;
        while (node.left != null) {
            node = node.left;
        }
    }
    public boolean hasNext() {
        return node != null;
    }
    public int next() {
        if (node == null) return -1;

        int ans = node.val;
        if (node.right != null) {
            node = node.right;
            while (node.left != null) node = node.left;
        } else {
            while (node.parent != null && node == node.parent.right) node = node.parent;
            node = node.parent;
        }
        return ans;
    }
}

再写一个不带parent pointer的。
由于没有parent pointer,这里要使用stack来做。

public class TreeNode {

    int val;
    TreeNode left, right;
    /*
    Constructor
     */
    public TreeNode(int val) {
        this.val = val;
    }
}

class InOrderIterator {
    Deque<TreeNode> stack;
    public InOrderIterator(TreeNode root) {
        stack = new LinkedList<>();
        while (root != null) {
            stack.push(root);
            root = root.left;
        }
    }
    public boolean hasNext() {
        return !stack.isEmpty();
    }
    public TreeNode next(){
        if (!hasNext()) return null;
        TreeNode ans = stack.pop();
        if (ans.right != null) {
            TreeNode node = ans.right;
            while (node != null) {
                stack.push(node);
                node = node.left;
            }
        }
        return ans;
    }
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 月如此苍凉,如此荒凉, 是谁昨天的荒唐伤了她? 纷飞的季节没有了毛毛细雨, 是谁辜负了如此美景? 孤雁南飞,切只见...
    我爱领导的小生阅读 225评论 0赞 1
  • 转自:http://www.cnblogs.com/zziawanblog/category/977414.htm...
    晴天哥_王志阅读 509评论 0赞 0
  • 朝九晚五过双休,白领工作贼得意;西装革履笔记本,小资生活好惬意;表面光鲜人人识,背后辛酸谁人知;麻木不仁在做事,何...
    豆浆哥油条妹阅读 147评论 0赞 0
  • 遥望睡卧美人长,近闻青葱草木香。 层峦林间鸟儿欢,叠翠图画游人转。
    文戈乎乎阅读 304评论 0赞 0
  • 之前写了一篇关于微商的文章,今天我想就互联网的迅猛发展来扩展一下,谈谈微营销。现在通过微信来营销的已经不仅限于营销...
    感恩因爱而美阅读 484评论 0赞 2

友情链接更多精彩内容