二进制树使用模板

时间:2016-06-03 12:27:56

标签: c++ templates

我有book的以下代码,它是二叉树的前序遍历的实现:

template<typename tVal>
struct binaryTree
{
    tVal v__;
    struct binaryTree<tVal> *left;
    struct binaryTree<tVal> *right;

    binaryTree(tVal v) : v__(v),
        left(NULL), right(NULL) {}
};

template<typename tVal>
void nonRecursivePreOrder(binaryTree<tVal> * root)
{
    std::stack<binaryTree<tVal> *> s;

    while (true)
    {

        while (root)
        {
            std::cout << " v=" << root->v__;
            s.push(root);
            root = root->left;
        }
        if (s.empty()) break;

        root = s.top();
        s.pop();
        root = root->right;
    }
}
  1. 在第9行的三元运算符中,最后{}的作用是什么?

  2. 如何实施利用上述功能的insertmain功能?

  3. 编辑:我已被告知第9行不是三元运算符,而是&#34;构造函数初始化列表&#34;

1 个答案:

答案 0 :(得分:2)

第9行只是一个构造函数。

这样的事情会对你有用:

template<typename T>
void put(binaryTree<T>* root, T val) {
    binaryTree<T>* node = new binaryTree<int>(val);

    if (root == nullptr) {        
        root = node;
        return;
    }

    binaryTree<T>* cur = root;
    binaryTree<T>* parent = nullptr;
    while(cur) {
        parent = cur;
        cur = (node->v__ > cur->v__) ? cur->right 
                                     : cur->left;
    }

    (node->v__ < parent->v__) ? parent->left  = node 
                              : parent->right = node; 
} 


int main() {
    binaryTree<int>* b = new binaryTree<int>(10);
    put<int>(b, 11); 
    put<int>(b, 5);
    put<int>(b, 14);
    put<int>(b, 25);
    put<int>(b, 1);

    nonRecursivePreOrder<int>(b);

    return 0;
}