1. 程式人生 > 實用技巧 >面試題 04.03. 特定深度節點連結串列

面試題 04.03. 特定深度節點連結串列

https://leetcode-cn.com/problems/list-of-depth-lcci/

這道題比較簡單,就是遍歷樹,廣度優先,一層層的遍歷,唯一需要注意的是,如何定義到了第幾層,做法就是在每一層結束,下一層開始,加入一個識別符號。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<ListNode*> listOfDepth(TreeNode* tree) {
        vector<ListNode*> alist;
        if (tree != NULL)
        {
            queue<TreeNode*> nodequeue;
            ListNode* plnode = NULL;
            nodequeue.push(tree);
            nodequeue.push(NULL);
            TreeNode * tnode = NULL;
            int tlevel = 0;
            while (!nodequeue.empty())
            {
                tnode = nodequeue.front();
                nodequeue.pop();
                if (tnode == NULL)
                {
                    tlevel++;
                    if (nodequeue.empty())
                    {
                        break;
                    }
                    plnode = NULL;
                    nodequeue.push(NULL);
                    continue;
                }
                else
                {
                    if (plnode == NULL)
                    {
                        plnode = new ListNode(0);
                        plnode->val = tnode->val;
                        alist.emplace_back(plnode);
                    }
                    else
                    {
                        plnode->next = new ListNode(0);
                        plnode = plnode->next;
                        plnode->val = tnode->val;
                    }
                }
                if (tnode->left != NULL)
                {
                    nodequeue.push(tnode->left);
                }
                if (tnode->right != NULL)
                {
                    nodequeue.push(tnode->right);
                }
            }
        }
        return alist;
    }
};