您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++怎么求解二叉樹的下一個結點”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++怎么求解二叉樹的下一個結點”吧!
給定一個二叉樹其中的一個結點,請找出中序遍歷順序的下一個結點并且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的next指針。下圖為一棵有9個節點的二叉樹。樹中從父節點指向子節點的指針用實線表示,從子節點指向父節點的用虛線表示
示例:
輸入:{8,6,10,5,7,9,11},8
返回:9
解析:這個組裝傳入的子樹根節點,其實就是整顆樹,中序遍歷{5,6,7,8,9,10,11},根節點8的下一個節點就是9,應該返回{9,10,11},后臺只打印子樹的下一個節點,所以只會打印9,如下圖,其實都有指向左右孩子的指針,還有指向父節點的指針,下圖沒有畫出來
數據范圍:節點數滿足1≤n≤50 ,節點上的值滿足1≤val≤100
要求:空間復雜度 O(1) ,時間復雜度 O(n)
示例:
輸入:
{8,6,10,5,7,9,11},8
返回值:
9
本題考察數據結構樹的使用。兩個方法:
1)暴力破解。通過next指針獲取根結點,對其進行中序排序,排序過程中用vector存儲,然后直接根據位置輸出即可。
2)結合中序排序性質。若某個結點存在右子樹,則右子樹的最左孩子就是它的下一個結點;若不存在右子樹,則它的第一個右父親,就是它的下一個結點。
/* 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) { if(!pNode) return NULL; // 確定根結點 TreeLinkNode* root=pNode; while(root->next) { root=root->next; } // 中序排序 vector<TreeLinkNode*> v; inorder(root,v); for(int i=0;i<v.size();++i) { if(v[i]==pNode&&(i+1)<v.size()) return v[i+1]; } return NULL; } // 排序 void inorder(TreeLinkNode* root,vector<TreeLinkNode*> &v) { if(!root) return; // 中序排序 inorder(root->left,v); v.push_back(root); inorder(root->right,v); } };
/* 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) { if(!pNode) return NULL; // 判斷是否存在右子樹 if(pNode->right) { TreeLinkNode* target=pNode->right; // 取最左孩子 while(target->left) { target=target->left; } return target; } // 不存在右子樹,尋找第一個右父親 while(pNode->next) { if(pNode->next->left==pNode) return pNode->next; pNode=pNode->next; } return NULL; } };
感謝各位的閱讀,以上就是“C++怎么求解二叉樹的下一個結點”的內容了,經過本文的學習后,相信大家對C++怎么求解二叉樹的下一個結點這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。