二叉树的层序遍历题目汇总

二叉树的层序遍历,就是图论中的广度优先搜索在二叉树中的应用,需要借助队列来实现(此时是不是又发现队列的应用了)。

虽然不能一口气打十个,打八个也还行。

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

二叉树的层序遍历题目汇总

上一篇:重温WIN32 API ------ Window消息跟踪


下一篇:C# 延迟初始化