首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法实例化类型TreeNode

无法实例化类型TreeNode
EN

Stack Overflow用户
提问于 2014-07-19 17:06:19
回答 4查看 2.7K关注 0票数 0
代码语言:javascript
复制
package com.cnu.ds.tree;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class Tree {
    public static void main(String[] args) {
        TreeNode treeNode = new TreeNode();
        treeNode.t = 1;
        treeNode.left = new TreeNode();
        treeNode.left.t = 2;
        treeNode.right = new TreeNode();
        treeNode.right.t = 3;
        treeNode.left.left = new TreeNode();
        treeNode.left.left.t = 4;
        treeNode.left.right = new TreeNode();
        treeNode.left.right.t = 5;
        treeNode.right.left = new TreeNode();
        treeNode.right.left.t = 6;
        treeNode.right.right = new TreeNode();
        treeNode.right.right.t = 7;
        // //////////////////////
        treeNode.left.left.left = new TreeNode();
        treeNode.left.left.left.t = 8;
        treeNode.left.left.right = new TreeNode();
        treeNode.left.left.right.t = 9;

        treeNode.left.right.left = new TreeNode();
        treeNode.left.right.left.t = 10;

        treeNode.left.right.right = new TreeNode();
        treeNode.left.right.right.t = 11;

        treeNode.right.left.left = new TreeNode();
        treeNode.right.left.left.t = 12;
        treeNode.right.left.right = new TreeNode();
        treeNode.right.left.right.t = 13;

        treeNode.right.right.left = new TreeNode();
        treeNode.right.right.left.t = 14;

        treeNode.right.right.right = new TreeNode();
        treeNode.right.right.right.t = 15;

        levelOrder(treeNode);
        levelOrderReverse(treeNode);
    }

    public static void levelOrderReverse(TreeNode root) {
        Queue<TreeNode> treeNodes = new LinkedList<>();
        TreeNode newRoot = root;
        treeNodes.add(root);
        treeNodes.add(null);
        Stack<Integer> stack = new Stack<>();
        Queue<TreeNode> queue = new LinkedList<>();
        boolean flip = false;
        while (!treeNodes.isEmpty()) {
            root = treeNodes.remove();
            if (root == null) {
                if (flip) {
                    while (!queue.isEmpty()) {
                        root = queue.remove();
                        int r = stack.pop();
                        int l = stack.pop();
                        root.left.t = r;
                        root.right.t = l;
                    }
                }
                flip = !flip;
                if (treeNodes.isEmpty()) {
                    break;
                }
                System.out.println();
                treeNodes.add(null);
            } else {
                if (root.left != null) {
                    treeNodes.add(root.left);
                }
                if (null != root.right) {
                    treeNodes.add(root.right);
                }
                if (flip) {
                    stack.push(root.t);
                } else {
                    queue.add(root);
                }
            }
        }
        System.out.println();
        levelOrder(newRoot);
    }

    public static void levelOrder(TreeNode root) {
        Queue<TreeNode> treeNodes = new LinkedList<>();
        treeNodes.add(root);
        treeNodes.add(null);
        Queue<TreeNode> queue = new LinkedList<>();
        while (!treeNodes.isEmpty()) {
            root = treeNodes.remove();
            if (root == null) {
                if (treeNodes.isEmpty()) {
                    break;
                }
                System.out.println();
                treeNodes.add(null);
            } else {
                if (root.left != null) {
                    treeNodes.add(root.left);
                }
                if (null != root.right) {
                    treeNodes.add(root.right);
                }
                queue.add(root);
                System.out.print(root.t + " ");
            }
        }
    }
}

输出:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1 3 2 4 5 6 7 15 14 13 12 11 10 9 8

以上是针对网站中建议的以下问题的代码片段的一部分。反转二叉树的交替级别节点。A/\b c/\/\d e f g/\/\/\/\h i k l m n o

修改的树:a/\c b/\/\d e f g/\/\/\/\o n m l k j i h

最初我得到的错误是"TreeNode不能被解析为类型“,然后我导入了java.swing,之后我得到了错误”无法实例化类型TreeNode“。

请给出建议

EN

回答 4

Stack Overflow用户

发布于 2014-07-19 17:12:20

不能使用new实例化TreeNode,因为TreeNodeinterface。但是,您可以这样说:

代码语言:javascript
复制
TreeNode node = new SomeClass();

其中,SomeClass是实现TreeNode接口的类。

票数 0
EN

Stack Overflow用户

发布于 2014-07-19 17:44:57

TreeNode是一个接口,并且接口永远不能使用new运算符或关键字来实例化。您可以使用TreeNode作为对象引用或句柄,但您必须使用带有新关键字的实现类来创建实例。访问here以了解有关TreeNode及其实现类的更多信息。

票数 0
EN

Stack Overflow用户

发布于 2014-07-19 18:15:12

您不能实例化interfaceTreeNode是一个接口,它只能实现或引用任何实现TreeNode的类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24838657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档