プログラマーインタビューゴールデンコード-インタビュー質問04.03。特定の深度ノードのリンクリスト

1.トピックの紹介

バイナリツリーが与えられた場合、特定の深さのすべてのノードを含むリンクリストを作成するアルゴリズムを設計します(たとえば、ツリーの深さがDの場合、Dのリンクリストが作成されます)。すべての深さのリンクされたリストの配列を返します。

 

例:

入力:[1,2,3,4,5、null、7,8]

        1
       / \ 
      2
     / \ \ 
    4 5 7
   /
  8

出力:[[1]、[2,3]、[4,5,7]、[8]]

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/list-of-depth-lcci
著作権はLeetCodeが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

2つの問題解決のアイデア

       この質問では、バイナリツリーのレベルトラバーサルを調べます。

3つの問題解決コード

class Solution {
public:
    //层次遍历
    vector<ListNode*> listOfDepth(TreeNode* tree) {
        vector<ListNode*> vl;
        if(tree == NULL)
            return vl;
        queue<TreeNode*> que;
        que.push(tree);
        while(!que.empty())
        {
            int n = que.size();
            TreeNode* pTree = NULL;
            ListNode* head = new ListNode(0);
            ListNode* pList = head;
            for(int i = 0; i < n; ++i)
            {
                pTree = que.front();
                pList->next = new ListNode(pTree->val);
                pList = pList->next;
                que.pop();
                if(pTree->left)
                    que.push(pTree->left);
                if(pTree->right)
                    que.push(pTree->right);
            }
            pList->next = NULL;
            vl.push_back(head->next);
        }
        return vl;
    }
};

4つの問題解決の結果

おすすめ

転載: blog.csdn.net/qq_39661206/article/details/108055651