1. 程式人生 > 其它 >二叉樹的層序遍歷題目彙總

二叉樹的層序遍歷題目彙總

二叉樹的層序遍歷,就是圖論中的廣度優先搜尋在二叉樹中的應用,需要藉助佇列來實現(此時是不是又發現佇列的應用了)。

雖然不能一口氣打十個,打八個也還行。

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)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。