inorder和preorder遍历使用递归 - 二进制搜索树c ++

use*_*781 0 c++ tree-traversal binary-search-tree

所以我需要使用递归实现成员函数,预订和按顺序遍历二叉搜索树.我无法实现所有三个,因为他们输出错误的输出.遍历应该将它遇到的数据值添加到给定的链表中.

我的成员函数只打印出树的正确节点.我附上了我的代码,如果有人可以给我一些关于错误所在的指针以及为什么输出没有打印它应该是什么的话,那将是惊人的.提前致谢!!!

我目前得到的输出:

size of test BinaryTree: 11  
member true for 8  
member true for 38  
member true for 39  
member true for 45  
pre order: [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 45, 45]  
in order: [8, 8, 8, 8, 38, 38, 38]
Run Code Online (Sandbox Code Playgroud)

我想要的输出:

size of test BinaryTree: 11  
member true for 1  
member true for 3  
member true for 4  
member true for 7  
member true for 8  
member true for 16  
member true for 31  
member true for 33  
member true for 38  
member true for 39  
member true for 45  
pre order: [8, 4, 3, 1, 7, 38, 31, 16, 33, 39, 45]  
in order: [1, 3, 4, 7, 8, 16, 31, 33, 38, 39, 45]
Run Code Online (Sandbox Code Playgroud)

我的代码:

bool BinaryTreeNode::member(Data * newData) {
   if (newData->compareTo(this->nodeData) == 0) {
           return true;
    }
   else if (newData->compareTo(this->nodeData) == -1) {
         if (left == NULL)
             return false;
        else
             return left->member(newData);
}
   else if (newData->compareTo(this->nodeData) == 1) {
        if (right == NULL)
           return false;
        else
           return right->member(newData);
}
return false;
    }        

    void BinaryTreeNode::preorderTraversal(LinkedList * result) const {
    result->insert(nodeData);
        if (left != NULL) left->preorderTraversal(result);
    result->insert(nodeData);
    if (right != NULL) right->preorderTraversal(result);
        }

    void BinaryTreeNode::inorderTraversal(LinkedList * result) const {
    if (left != NULL) {
         left->inorderTraversal(result);
         result->insert(nodeData);
    }
    if (right != NULL) {
         right->inorderTraversal(result);
    }
    }
Run Code Online (Sandbox Code Playgroud)

n. *_* m. 9

预购:

do stuff with the node // pre means before
recurse left
recurse right
Run Code Online (Sandbox Code Playgroud)

为了:

recurse left
do stuff with the node // in means inside
recurse right
Run Code Online (Sandbox Code Playgroud)

后序:

recurse left
recurse right
do stuff with the node // post means after
Run Code Online (Sandbox Code Playgroud)