題目:給定一個二叉樹和其中的一個結(jié)點,請找出中序遍歷順序的下一個結(jié)點并且返回。注意,樹中的結(jié)點不僅包含左右子結(jié)點,同時包含指向父結(jié)點的指針。
創(chuàng)新互聯(lián)長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為資源企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè),資源網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
題目算是比較新穎的了
題解:
//結(jié)構(gòu)體定義
struct BinaryTreeNode
{int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
BinaryTreeNode* parent;
}
//找下一個節(jié)點
BinaryTreeNode* GetNext(BinaryTreeNode* node)
{//特殊處理
if(node == nullptr)
return nullptr;
BinaryTreeNode* next = nullptr;//定義要返回的結(jié)果指針
if(node->right != nullptr)//有右子樹:找到右子樹的最左節(jié)點
{BinaryTreeNode* pRight = node->right;
while(pRight ->left != nullptr)
{ pRight = pRight->left;
}
next = pRight;
}
else if(node->parent != nullptr)//非根節(jié)點
{BinaryTreeNode* current = node;
BinaryTreeNode* pParent = node->parent;
while(pParent != nullptr && current == pPrent->right)//沒有右子樹且他還是父節(jié)點的右子節(jié)點:向上遍歷直到找到一個節(jié)點是父節(jié)點的左子節(jié)點,該父節(jié)點就是要找的這個節(jié)點
{ current = pParent;
pParent= pParent->parent;
}
next = pParent;//沒有右子樹且是父節(jié)點的左子節(jié)點:該節(jié)點的父節(jié)點就是要找的節(jié)點
}
}
拓展:尋求上一個節(jié)點
跟上述思路相反:
如果有左子樹,即為左子樹的最右子節(jié)點。
如果無左子樹,如果本身為父節(jié)點的的右子節(jié)點,即為父節(jié)點
為父節(jié)點的左子節(jié)點,即為祖父節(jié)點
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:【劍指Offer|C++】面試題8:尋找二叉樹的下一個節(jié)點|上一個節(jié)點-創(chuàng)新互聯(lián)
文章出自:http://www.rwnh.cn/article10/dcojgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、軟件開發(fā)、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站建設(shè)、標簽優(yōu)化、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容