无右子树的两个分支其实可以合并,迭代两个节点pre即前一个结点和cur即前一个结点的父节点,初始时pre=输入,cur=输入的父节点,迭代停止条件为cur == nullptr || cur->left == pre。 总体代码: class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if (pNode == nullptr) return nullptr; // 如果有右子 if (pNode->right) { TreeLinkNode* cur = pNode->right; while (cur->left) { cur = cur->left; } return cur; } // 无右子,一直迭代到cur为父的左子,此时父为下一个 else { TreeLinkNode* pre = pNode; TreeLinkNode* cur = pNode->next; while(cur != nullptr && cur->left != pre) { pre = cur; cur = cur->next; } return cur; } } };
1

相关推荐

被加薪的哈里很优秀:应该继续招人,不会给你留岗位的
点赞 评论 收藏
分享
Cherrycola01:0实习 0项目 约等于啥也没有啊 哥们儿这简历认真的吗
点赞 评论 收藏
分享
牛客网
牛客企业服务