我想避免重复我的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
]
答案 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()循环进行了一些次要但重要的更新。现在好了。