马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本题如果利用BFS去层序遍历,代码和 填充每个节点的下一个右侧节点 题没有任何区别。但是利用已经建立好的next链表去做,则必要考虑到next指向的节点子节点是否为空的可能。
- class Solution {
- public:
- Node* connect(Node* root) {
- if(root == nullptr){
- return nullptr;
- }
- Node * head = root;
- while(head != nullptr){
- Node * dummy = new Node(0);
- Node * temp = dummy;
-
- for(Node* cur = head; cur != nullptr; cur = cur->next){
- if(cur->left != nullptr){
- temp->next =cur->left;
- temp = temp->next;
- }
- if(cur->right != nullptr){
- temp->next = cur->right;
- temp = temp->next;
- }
- }
- head = dummy->next;
- }
- return root;
- }
- };
复制代码 利用DFS来解决,通过一个数组来纪录每一层的前节点,然后不断更新这个数组。
- class Solution {
- public:
- void dfs(Node* root, vector<Node*>& vec, int depth){
- if(root == nullptr){
- return;
- }
- if(depth >= vec.size()){
- vec.push_back(nullptr);
- }
- if(vec[depth] != nullptr){
- vec[depth]->next = root;
- }
- vec[depth] = root;
- dfs(root->left, vec, depth + 1);
- dfs(root->right, vec, depth + 1);
- }
- Node* connect(Node* root) {
- vector<Node*> vec;
- int depth = 0;
- dfs(root, vec, depth);
- return root;
- }
- };
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |