LeetCode—173 Binary Search Tree Iterator

来源:互联网 发布:linux安装kvm虚拟机 编辑:程序博客网 时间:2024/06/05 05:15

思路:建立一个list,从root开始读left进list,如果left==null则停止。hasNext只要判断list.size是否为0;next取出list最后一个节点,然后判断该节点是否有right,有的话写入list,继续判断是否有left,有的话写入。

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class BSTIterator {    List<TreeNode> list=new ArrayList<TreeNode>();    public BSTIterator(TreeNode root) {        if(root!=null){            list.add(root);        }        while(list.size()>0){            TreeNode node=list.get(list.size()-1);            if(node.left!=null){                list.add(node.left);                node.left=null;            }else{                break;            }        }    }    /** @return whether we have a next smallest number */    public boolean hasNext() {        return list.size()!=0;    }    /** @return the next smallest number */    public int next() {        TreeNode test=list.get(list.size()-1);        list.remove(list.size()-1);        if(test.right!=null){            list.add(test.right);            while(true){                TreeNode node=list.get(list.size()-1);                if(node.left!=null){                    list.add(node.left);                    node.left=null;                }else {                    break;                }            }        }        return test.val;    }}/** * Your BSTIterator will be called like this: * BSTIterator i = new BSTIterator(root); * while (i.hasNext()) v[f()] = i.next(); */


0 0