[英]Store a counter in a binary tree recursive function in java
我在學校做一個練習,我必須在java中創建一個方法(最多O(n)時間),該方法存儲給定值在二叉樹中出現的順序,無論是后順序,按順序還是按順序預遍歷。 到目前為止,我有有效的代碼,但是計數器不能正確遞增。 有人可以讓我知道我在做什么錯嗎? 我的代碼如下:
public class Node {
int value; // data used as key value
Node left; // this node's left child
Node right; // this node's right child
int preorderNumber; // node number in preorder
int inorderNumber; // node number in inorder
int postorderNumber; // node number in postorder
public Node(int item) { //instantiates node.
value = item;
left = right = null;
preorderNumber = inorderNumber = postorderNumber = 0;
}
}
/* Given a binary tree, print its nodes according to the postorder traversal. */
private void printPostorder(Node node) {
int counter = 0;
if (node == null) { //the tree is empty.
return;
}
printPostorder(node.left); // first recur on left subtree
printPostorder(node.right); // then recur on right subtree
System.out.print(node.value + " "); // now deal with the node
counter++;
node.postorderNumber = counter;
}
/* Given a binary tree, print its nodes in inorder*/
private void printInorder(Node node) {
int counter = 0;
if (node == null) {
return;
}
printInorder(node.left); // first recur on left child
System.out.print(node.value + " "); // then print the data of node
counter++;
node.inorderNumber = counter;
printInorder(node.right); // now recur on right child
}
/* Given a binary tree, print its nodes in preorder*/
private void printPreorder(Node node) {
int counter = 0;
if (node == null) { //binary tree is empty.
return;
}
System.out.print(node.value + " "); // first print data of node.
counter++;
node.preorderNumber = counter;
printPreorder(node.left); // recur on left subtree
printPreorder(node.right); // now recur on right subtree
}
public int find(int valueToFind) {
Node current = root, prior = null;
while (current != null) {
int compare;
compare = (valueToFind - current.value);
if (compare < 0) {
prior = current;
current = current.left;
} else if (compare > 0) {
current = current.right;
} else {
System.out.println("The node value searched for is : " + valueToFind);
System.out.println("The in order value is: " + current.inorderNumber);
System.out.println("The post order value is: " + current.postorderNumber);
System.out.println("The pre order value is: " + current.preorderNumber);
return current.value;
}
}
return prior == null ? null : prior.value;
}
}
每當我嘗試運行此命令時,都會得到類似以下輸出的信息:
節點數為:2二叉樹的順序遍歷為3 4二叉樹的順序遍歷為3 4二叉樹的后順序遍歷為4 3搜索的節點值為:4順序值是:1后順序值是:1預定值是:1
我不確定如何將計數器的值傳遞給節點,以便它保留正確的值(在這種情況下,為2、2和1)。 謝謝!
您需要從prv值獲取計數器。 否則,它將一直被重置。 像下面那樣做
private void printPostorder(Node node) {
if (node == null) { //the tree is empty.
return;
}
int counter = node.postorderNumber;
printPostorder(node.left); // first recur on left subtree
printPostorder(node.right); // then recur on right subtree
System.out.print(node.value + " "); // now deal with the node
counter++;
node.postorderNumber = counter;
}
預購方法也應該像這樣改變,否則計數器不會增加
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.