Java报错:无法将Object转为binaryTree.Node,求原因及解决
问题解答
核心原因:未使用泛型,而非Java版本差异
你遇到的类型不匹配错误,本质是Queue未指定泛型类型导致的。Java 5及以后引入了泛型,如果你声明Queue q这种原始类型,remove()方法会返回Object,直接赋值给Node类型变量就会触发类型转换错误。
教程里的代码能运行,大概率是两种情况:
- 教程使用了泛型但你没注意,比如声明的是
Queue<Node> q; - 教程用的是Java 5之前的版本(几乎不可能,现在没人用这么老的版本),那时集合都是原始类型,编译器不会做类型检查。
修复方案
把Queue的声明改为泛型版本,明确指定存储的是Node类型:
Queue<Node> q = new LinkedList<>();
这样q.remove()会直接返回Node类型,不需要强制转换,类型匹配问题就解决了。
额外优化点
你的levelOrder方法里打印节点时,System.out.println(currNode+" ");会打印对象的内存地址,应该改为打印节点数据;同时原代码的换行逻辑会导致输出格式混乱,调整后更符合层序遍历的预期:
System.out.print(currNode.data + " ");
修复后的完整levelOrder方法
public static void levelOrder(Node root){ if(root==null) return; Queue<Node> q = new LinkedList<>(); q.add(root); q.add(null); while(!q.isEmpty()){ Node currNode = q.remove(); // 此处不再报错 if(currNode==null){ System.out.println(); if(q.isEmpty()){ break; }else{ q.add(null); } }else{ System.out.print(currNode.data + " "); if(currNode.left!=null) q.add(currNode.left); if(currNode.right!=null) q.add(currNode.right); } } }
内容的提问来源于stack exchange,提问作者Ritam Arya
相关产品推荐
相关产品推荐

