用C ++避免重复使用树的左右子

时间:2016-03-07 23:23:03

标签: c++ pointers binary-tree idioms idiomatic

我想避免重复我的if-else两次(一次为左,一次为右,相同),所以我这样做,感觉非常单一:

MovieNode** child = title < parent->title ? &parent->left : &parent->right;
if(*child)
    parent = *child;
else
    *child = new MovieNode(ranking, title, releaseYear, quantity);

这样做的正确方法是什么?

[顺便说一句,这就是为什么我更喜欢Haskell XD,我只会做parent = child]

1 个答案:

答案 0 :(得分:1)

看起来您正在为二叉树编写迭代插入算法。你所拥有的是简洁和可接受的,虽然看起来有点不正常。

我通常写这种算法的方式是这样的:

// start from your root node, parent must not be NULL
MovieNode ** current = &parent;

// find an appropriate empty leaf
while (*(current = (title < (*current)->title ? &(*current)->left : &(*current)->right)));

// assign to the empty leaf
(*current) = new MovieNode(ranking, title, releaseYear, quantity);
编辑:在我实际测试并在真实程序中证明了这一点后,对while()循环进行了一些次要但重要的更新。现在好了。