二叉樹的層序遍歷題目彙總
阿新 • • 發佈:2021-07-31
二叉樹的層序遍歷,就是圖論中的廣度優先搜尋在二叉樹中的應用,需要藉助佇列來實現(此時是不是又發現佇列的應用了)。
雖然不能一口氣打十個,打八個也還行。
102.二叉樹的層序遍歷
107.二叉樹的層次遍歷II
199.二叉樹的右檢視
637.二叉樹的層平均值
429.N叉樹的前序遍歷
515.在每個樹行中找最大值
116.填充每個節點的下一個右側節點指標
117.填充每個節點的下一個右側節點指標II
作者:carlsun-2
連結:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/solution/dai-ma-sui-xiang-lu-wo-yao-da-shi-ge-er-93o1d/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
其中
116.填充每個節點的下一個右側節點指標
117.填充每個節點的下一個右側節點指標II
進階解法需要使用常數空間,進階解法如下
116:
class Solution { public: void connect(TreeLinkNode *root) { if(root==NULL||root->left==NULL) return; root->left->next=root->right; if(root->next!=NULL) root->right->next=root->next->left; connect(root->left); connect(root->right); return ; } };
117:
class Solution { public: void handle(Node* &last, Node* &p, Node* &nextStart) { if (last) { last->next = p; } if (!nextStart) { nextStart = p; } last = p; } Node* connect(Node* root) { if (!root) { return nullptr; } Node *start = root; while (start) { Node *last = nullptr, *nextStart = nullptr; for (Node *p = start; p != nullptr; p = p->next) { if (p->left) { handle(last, p->left, nextStart); } if (p->right) { handle(last, p->right, nextStart); } } start = nextStart; } return root; } }; 作者:LeetCode-Solution 連結:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/solution/tian-chong-mei-ge-jie-dian-de-xia-yi-ge-you-ce-15/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。