填充每个节点的下一个右侧节点Ⅱ-力扣

打印 上一主题 下一主题

主题 1721|帖子 1721|积分 5163

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本题如果利用BFS去层序遍历,代码和 填充每个节点的下一个右侧节点 题没有任何区别。但是利用已经建立好的next链表去做,则必要考虑到next指向的节点子节点是否为空的可能。
  1. class Solution {
  2. public:
  3.     Node* connect(Node* root) {
  4.         if(root == nullptr){
  5.             return nullptr;
  6.         }
  7.         Node * head = root;
  8.         while(head != nullptr){
  9.             Node * dummy = new Node(0);
  10.             Node * temp = dummy;
  11.             
  12.             for(Node* cur = head; cur != nullptr; cur = cur->next){
  13.                 if(cur->left != nullptr){
  14.                     temp->next =cur->left;
  15.                     temp = temp->next;
  16.                 }
  17.                 if(cur->right != nullptr){
  18.                     temp->next = cur->right;
  19.                     temp = temp->next;
  20.                 }
  21.             }
  22.             head = dummy->next;
  23.         }
  24.         return root;
  25.     }
  26. };
复制代码
利用DFS来解决,通过一个数组来纪录每一层的前节点,然后不断更新这个数组。
  1. class Solution {
  2. public:
  3.     void dfs(Node* root, vector<Node*>& vec, int depth){
  4.         if(root == nullptr){
  5.             return;
  6.         }
  7.         if(depth >= vec.size()){
  8.             vec.push_back(nullptr);
  9.         }
  10.         if(vec[depth] != nullptr){
  11.             vec[depth]->next = root;
  12.         }
  13.         vec[depth] = root;
  14.         dfs(root->left, vec, depth + 1);
  15.         dfs(root->right, vec, depth + 1);
  16.     }
  17.     Node* connect(Node* root) {
  18.         vector<Node*> vec;
  19.         int depth = 0;
  20.         dfs(root, vec, depth);
  21.         return root;
  22.     }
  23. };
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表