populating-next-right-pointers-in-each-node
来源:互联网 发布:java高并发架构 编辑:程序博客网 时间:2024/06/05 16:25
题目描述
Follow up for problem “Populating Next Right Pointers in Each Node”.
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
You may only use constant extra space.
For example,
Given the following binary tree,
1
/ \
2 3
/ \ \
4 5 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ \
4-> 5 -> 7 -> NULL
如果借助辅助空间可以直接按照层序遍历来做,如果不借助辅助空间可以利用next进行遍历,下面的代码有优化的空间.
/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {} * }; */class Solution {public: void connect(TreeLinkNode *root) { if(root==NULL) return; while(root!=NULL) //遍历完所有的层结束 { TreeLinkNode* temp=root; while(root!=NULL){ //遍历完一层结束 if(root->left&&root->right) //如果左右孩子都有将左右孩子连起来 { root->left->next=root->right; } if(root->left!=NULL&&root->right==NULL) //只有左孩子的情况 { TreeLinkNode* temp2=root->next; while(temp2){ //一直到找到可以连接的下一个点位置 if(temp2->left){ root->left->next=temp2->left; break; } if(temp2->right){ root->left->next=temp2->right; break; } temp2=temp2->next; } root=temp2; //root更新为已连接的孩子的父节点 continue; } if(root->right!=NULL) //有右孩子的情况包括左右孩子都有 { TreeLinkNode* temp2=root->next; while(temp2){ //寻找下一个连接的点. if(temp2->left) { root->right->next=temp2->left; break; } if(temp2->right){ root->right->next=temp2->right; break; } temp2=temp2->next; } root=temp2; continue; } root=root->next; //左右孩子都没有直接更新到右边一个节点 } while(temp) //找到下一层最左边的节点,继续遍历下一层. { if(temp->left){ temp=temp->left; break; } else if(temp->right) { temp=temp->right; break; } temp=temp->next; } root=temp; } }};
0 0
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- bzoj3956:Count
- Servlet
- linux1
- vue2.0父子组件间通信
- va_start和va_end使用详解
- populating-next-right-pointers-in-each-node
- vim编辑器中如何查找某个词
- vue.js 实现 todo list 任务表单-2
- hdu1162 Eddy's picture 最小生成树 prim
- READING NOTE: FastMask: Segment Multi-scale Object Candidates in One Shot
- 新水手上船
- Java垃圾回收
- RNN时间序列预测(1)-Tensorflow入门,MNIST学习
- LeetCode 141 Linked List Cycle(链表判环)