亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java - 在 BT 的前序遍歷中返回節點 x 之后訪問的節點

Java - 在 BT 的前序遍歷中返回節點 x 之后訪問的節點

哈士奇WWW 2021-12-22 15:32:43
我被要求在 Java 中為學校“返回在二叉樹的前序遍歷中在節點 x 之后訪問的節點”。我已經創建了一個代碼來按預定順序列出所有節點,但我不確定如何打印單個節點。我創建節點的第一堂課是:public class TreeNode {int value;        // The data in this node.TreeNode left;   // Pointer to the left subtree.TreeNode right;  // Pointer to the right subtree.TreeNode parent; //Pointer to the parent of the node. TreeNode(int value) {    this.value = value;    this.right = null;    this.left = null;    this.parent = null; } public void displayNode() { //Displays the value of the node.    System.out.println(value + " "); }然后我有班級來構建二叉樹。它還按預定順序打印整棵樹:public class BTree2 {TreeNode root;                // the first node in the treepublic boolean isEmpty() // true if no links{    return root == null;}private TreeNode addRecursive(TreeNode current, int value) {    if (current == null) {        return new TreeNode(value);    }    if (value < current.value) {        current.left = addRecursive(current.left, value);    } else if (value > current.value) {        current.right = addRecursive(current.right, value);    } else {        // value already exists        return current;    }    return current;}public void add(int value) {    root = addRecursive(root, value);}void printPreorder(TreeNode node) {    if (node == null) {        return;    }    System.out.print(node.value + " "); /* first print data of node */    printPreorder(node.left);   /* then recur on left subtree */    printPreorder(node.right);  /* now recur on right subtree */}void printPreorder() {    printPreorder(root);}   這就是我卡住的地方:如何打印特定節點之后的節點,而不僅僅是整個樹?我以為會是: public TreeNode findPreorder(int key) // find node with given key  {                            // (assumes non-empty tree)      TreeNode current = root;                // start at root      while (current.value == key) // while there is a match      {        current = current.left;        if (key < current.value) // go left?          {            current = current.right;} 我的輸出是:二叉樹的前序遍歷為 1 2 4 5 31之后的節點是5有任何想法嗎?謝謝!!
查看完整描述

2 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

您基本上可以使用相同的功能以預購方式進行訪問,并進行一些修改:


void findNextInPreOrder(TreeNode node, int key) {

    if (node == null) {

        return;

    }

    if (node.value == key) {

       if(node.left != null){

          System.out.print("Next is on left: " + node.left.value);

       } else if (node.right != null){

          System.out.print("Next is on right: " + node.right.value);

       } else {

          System.out.print("There is no next node.");

       }

    }   

    findNextInPreOrder(node.left);   /* then recur on left subtree */

    findNextInPreOrder(node.right);  /* now recur on right subtree */

}


查看完整回答
反對 回復 2021-12-22
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

我還添加了一個“else”語句,因為這似乎對我的實現有所幫助:


void findNextInPreOrder(Node node, int key) {

    if (node == null) {

        return;

    }

    if (node.value == key) {

        if (node.left != null) {

            System.out.print("Next is on left: " + node.left.value);

        } else if (node.right != null) {

            System.out.print("Next is on right: " + node.right.value);

        } else {

            System.out.print("There is no next node.");

        }

    } else {

        findNextInPreOrder(node.left, key);

        /* then recur on left subtree */

        findNextInPreOrder(node.right, key);

        /* now recur on right subtree */

    }

}


查看完整回答
反對 回復 2021-12-22
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號