如何return一个二叉树中序遍历的迭代器?
How to return an Iterator for Inorder traversal in Binary Tree?
我试图将我的中序遍历结果存储在一个 LinkedList 中并通过迭代器检索,但是在打印我的结果时出现空指针异常。当我尝试通过函数中的递归和打印值来执行此操作时,我得到了正确的输出。当我递归地尝试调用 inorderItr(root.left)
时,它会将 root
视为 null。我想,我的 return 陈述不正确,不确定,下面是我的代码和我的代码中断的注释。任何帮助和概念表示赞赏。我已经看到 this,但没有帮助,因为我正在尝试 return 和 Iterator
。同样,我是 Java 和 Iterator
概念的新手。 TIA。
编辑:我找到了解决办法,请看下面的答案
class TreeNode {
int data;
TreeNode left;
TreeNode right;
public TreeNode(int d) {
data = d;
}
}
public class TreeTraversal {
TreeNode root;
public TreeTraversal() {
root = null;
}
static List<TreeNode> l = new LinkedList<TreeNode>();
public static Iterator<TreeNode> inorderItr(TreeNode root) {
List<TreeNode> l = new LinkedList<TreeNode>();
//I think I am missing something here
if (root == null)
return
//This is where my root is null
inorderItr(root.left);
l.add(root);
inorderItr(root.right);
Iterator<TreeNode> itr = l.iterator();
return itr;
}
//This code works fine
public static void inorderWorksFine(TreeNode root) {
if (root == null)
return;
inorder(root.left);
System.out.print(root.data + " ");
inorder(root.right);
}
public static void main(String args[]) {
TreeTraversal t = new TreeTraversal();
t.root = new TreeNode(10);
t.root.left = new TreeNode(5);
t.root.left.left = new TreeNode(1);
t.root.left.right = new TreeNode(7);
t.root.right = new TreeNode(40);
t.root.right.right = new TreeNode(50);
// inorderWorksFine(t.root);
Iterator<TreeNode> itr = inorderItr(t.root);
while (itr.hasNext()) {
System.out.println(itr.next().data + " ");
}
}
}
我已经为中序遍历和全局链表创建了一个辅助方法,并在一个单独的递归辅助方法中将我所有的中序元素添加到该列表中。这样我们就可以 return 一个 Iterator
static List<TreeNode> l = new LinkedList<TreeNode>();
public static Iterator<TreeNode> inorderItr(TreeNode root) {
recursionInorder(root);
Iterator<TreeNode> itr = l.iterator();
return itr;
}
public static void recursionInorder(TreeNode node){
if(node==null)
return;
recursionInorder(node.left);
l.add(node);
recursionInorder(node.right);
}
我试图将我的中序遍历结果存储在一个 LinkedList 中并通过迭代器检索,但是在打印我的结果时出现空指针异常。当我尝试通过函数中的递归和打印值来执行此操作时,我得到了正确的输出。当我递归地尝试调用 inorderItr(root.left)
时,它会将 root
视为 null。我想,我的 return 陈述不正确,不确定,下面是我的代码和我的代码中断的注释。任何帮助和概念表示赞赏。我已经看到 this,但没有帮助,因为我正在尝试 return 和 Iterator
。同样,我是 Java 和 Iterator
概念的新手。 TIA。
编辑:我找到了解决办法,请看下面的答案
class TreeNode {
int data;
TreeNode left;
TreeNode right;
public TreeNode(int d) {
data = d;
}
}
public class TreeTraversal {
TreeNode root;
public TreeTraversal() {
root = null;
}
static List<TreeNode> l = new LinkedList<TreeNode>();
public static Iterator<TreeNode> inorderItr(TreeNode root) {
List<TreeNode> l = new LinkedList<TreeNode>();
//I think I am missing something here
if (root == null)
return
//This is where my root is null
inorderItr(root.left);
l.add(root);
inorderItr(root.right);
Iterator<TreeNode> itr = l.iterator();
return itr;
}
//This code works fine
public static void inorderWorksFine(TreeNode root) {
if (root == null)
return;
inorder(root.left);
System.out.print(root.data + " ");
inorder(root.right);
}
public static void main(String args[]) {
TreeTraversal t = new TreeTraversal();
t.root = new TreeNode(10);
t.root.left = new TreeNode(5);
t.root.left.left = new TreeNode(1);
t.root.left.right = new TreeNode(7);
t.root.right = new TreeNode(40);
t.root.right.right = new TreeNode(50);
// inorderWorksFine(t.root);
Iterator<TreeNode> itr = inorderItr(t.root);
while (itr.hasNext()) {
System.out.println(itr.next().data + " ");
}
}
}
我已经为中序遍历和全局链表创建了一个辅助方法,并在一个单独的递归辅助方法中将我所有的中序元素添加到该列表中。这样我们就可以 return 一个 Iterator
static List<TreeNode> l = new LinkedList<TreeNode>();
public static Iterator<TreeNode> inorderItr(TreeNode root) {
recursionInorder(root);
Iterator<TreeNode> itr = l.iterator();
return itr;
}
public static void recursionInorder(TreeNode node){
if(node==null)
return;
recursionInorder(node.left);
l.add(node);
recursionInorder(node.right);
}