簡體   English   中英

無法實例化 TreeNode 類型

[英]Cannot instantiate the type TreeNode

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 / \\ bc / \\ / \\ defg / \\ / \\ / \\ / \\ hijklmno

修改樹:a / \\ cb / \\ / \\ defg / \\ / \\ / \\ / \\ onmlkjih

最初我得到的錯誤是“TreeNode 不能被解析為一種類型”然后我導入了 java.swing 之后我得到了錯誤“無法實例化類型 TreeNode”

請建議

你不能用new實例化TreeNode ,因為TreeNode是一個interface 不過你可以說:

TreeNode node = new SomeClass();

其中SomeClass是實現TreeNode接口的類。

TreeNode 是一個接口,永遠不能使用 new 運算符或關鍵字實例化接口。 您可以使用 TreeNode 作為對象引用或句柄,但您必須使用一些帶有 new 關鍵字的實現類來創建實例。 訪問此處了解有關 TreeNode 及其實現類的更多信息。

您無法實例化interface TreeNode是一個只能被實現或引用到任何實現TreeNode類的接口。

像這樣嘗試 org.primefaces.model.DefaultTreeNode:

TreeNode root = new DefaultTreeNode("SomeID", null);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM