感想不仅仅是
向上 向下使用
还有while的条件使用
还有变量初始化位置
还有出口的异常场景
/**
* struct TreeLinkNode {
* int val;
* struct TreeLinkNode *left;
* struct TreeLinkNode *right;
* struct TreeLinkNode *next;
* };
*/
typedef struct TreeLinkNode Node;
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pNode TreeNode类
* @return TreeNode类
*/
struct TreeLinkNode* GetNext(struct TreeLinkNode* pNode ) {
// write code here
//exit 4.1 null head
if(NULL == pNode)
return NULL;
//exit find right son, most left one
if(pNode->right){
pNode = pNode->right;
while(pNode->left){//错误1 must son,not pNode
// if(pNode->left == NULL){
// return pNode; // it is not right
// }
pNode = pNode->left;
}
return pNode;//must here //错误1
}
//4.3 upper one , grand fahter's left son == Father'
Node * upper=NULL;
while(pNode->next){ //must next ,or else dead loop //错误3
upper = pNode->next;
if(upper!=NULL){
if(upper->left == pNode){
return upper;
}
pNode = upper;
}
}
//4.4 not found ,null
return NULL;
}