劍指offer 面試題8:二叉樹的下一個節點 c++
阿新 • • 發佈:2018-11-20
題目:給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
解析:三種情況:1.若節點有右子樹,中序下一個就是 右子樹最左孩子節點 2.若無右子樹,且當前節點是父節點的左子節點,下一個就是父節點 3.無右子樹,且當前節點是父節點的右子節點,那下一個就是 父節點的父節點,一直往上找, 一直找到根,說明當時節點是樹的最右節點,中序 遍歷無下一個節點。寫法上第2中和第3中可以合併一起寫
class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode == nullptr) return nullptr; TreeLinkNode *ret=nullptr; if(pNode->right!=nullptr) { TreeLinkNode *pcur = pNode->right; while(pcur && pcur->left) { pcur=pcur->left; } ret = pcur; }else if(pNode->next) //右子樹為空 且父節點不空 { TreeLinkNode *pcur=pNode,*parent=pNode->next; while(parent && parent->right == pcur) //父節點不空 { pcur = parent; parent = parent->next; } ret = parent; }return ret; } };
https://www.nowcoder.com/profile/9695725/codeBookDetail?submissionId=37384915