面試題 04.03. 特定深度節點連結串列
阿新 • • 發佈:2020-09-08
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; } };