分类讨论
- 分类讨论解决问题
- pNode为左节点 pNode->next|pNode->right
- pNode为右节点 pNode->right | 祖先节点 | 空
- pNode 为祖先节点 pNode->right | nullptr
- 漏了两种情况,导致报错
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
}
};
*/
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode) {
//pNode非空
//分类讨论
//pNode为左节点->pNode->next;
//pNode为右节点 pNode->right | 祖先节点 | 空
//pNode为中间节点 pNode->right
// 祖先节点
if(pNode->next)
{
//左
if(pNode->next->left==pNode)
{
//左节点
if(pNode->right)
{
return pNode->right;
}
else{
return pNode->next;
}
}
else{
//右节点
if(pNode->right)
{
return pNode->right;
}
else{
//左子树
TreeLinkNode* cur=pNode->next,*front=pNode;
while(cur->next)
{
front=cur;
cur=cur->next;
}
if(front==cur->left)
{
return cur;
}
else{
//右子树
return nullptr;
}
//右子树
}
}
}
else {
//root节点
if(pNode->right)
{
TreeLinkNode* cur=pNode->right;
//左节点
while(cur->left)
{
cur=cur->left;
}
return cur;
}
else{
return nullptr;
}
}
}
};



京公网安备 11010502036488号