gpt4 book ai didi

c++ - 避免在 C++ 中重复树的左右子节点

转载 作者:行者123 更新时间:2023-11-30 05:30:40 24 4
gpt4 key购买 nike

我想避免重复我的 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]

最佳答案

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

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

// 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() 循环进行了次要但重要的更新。现在可以走了。

关于c++ - 避免在 C++ 中重复树的左右子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com