leetcode 117. Populating Next Right Pointers in Each Node II BFS广度优先遍历
来源:互联网 发布:系统格式化数据恢复 编辑:程序博客网 时间:2024/06/04 01:36
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
he上一道题一样,代码一样使用,就是做一个简单的BFS广度优先遍历。
代码如下:
import java.util.ArrayList;import java.util.List;/*class TreeLinkNode { int val; TreeLinkNode left, right, next; TreeLinkNode(int x) { val = x; }}*//* * 就是一个BFS广度优先遍历 * */public class Solution { public void connect(TreeLinkNode root) { if(root == null) return; List<TreeLinkNode> myQueue = new ArrayList<TreeLinkNode>(); myQueue.add(root); int count = 1; while(myQueue.isEmpty()==false) { int tmp = 0; for(int i=0;i<count-1;i++) { if(myQueue.get(0).left!=null) { myQueue.add(myQueue.get(0).left); tmp++; } if(myQueue.get(0).right!=null) { myQueue.add(myQueue.get(0).right); tmp++; } myQueue.get(0).next = myQueue.get(1); myQueue.remove(0); } if(myQueue.get(0).left!=null) { myQueue.add(myQueue.get(0).left); tmp++; } if(myQueue.get(0).right!=null) { myQueue.add(myQueue.get(0).right); tmp++; } myQueue.get(0).next = null; myQueue.remove(0); count = tmp; } } }
下面是C++的做法,和上一道题一样,就是做一个BFS广度优先遍历
代码如下:
#include <iostream>#include <string>#include <vector>#include <queue>using namespace std;/*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) { queue<TreeLinkNode*> que; if (root == NULL) return; que.push(root); while (que.empty() == false) { int size = que.size(); vector<TreeLinkNode*> one; for (int i = 0; i < size; i++) { TreeLinkNode* top = que.front(); que.pop(); one.push_back(top); if (top->left != NULL) que.push(top->left); if (top->right != NULL) que.push(top->right); } for (int i = 0; i <= (int)one.size() - 2; i++) one[i]->next = one[i + 1]; one[one.size() - 1]->next = NULL; } }};
阅读全文
0 0
- leetcode 117. Populating Next Right Pointers in Each Node II BFS广度优先遍历
- leetcode 116. Populating Next Right Pointers in Each Node BFS广度优先遍历
- LeetCode 117. Populating Next Right Pointers in Each Node II
- [LeetCode]117.Populating Next Right Pointers in Each Node II
- [Leetcode] 117. Populating Next Right Pointers in Each Node II
- [leetcode] 117.Populating Next Right Pointers in Each Node II
- [LeetCode]117. Populating Next Right Pointers in Each Node II
- Leetcode 117. Populating Next Right Pointers in Each Node II
- [leetcode]117. Populating Next Right Pointers in Each Node II
- LeetCode 117. Populating Next Right Pointers in Each Node II
- Leetcode 117. Populating Next Right Pointers in Each Node II
- [LeetCode] 117. Populating Next Right Pointers in Each Node II
- LeetCode 117. Populating Next Right Pointers in Each Node II
- leetcode-117. Populating Next Right Pointers in Each Node II
- Leetcode 117. Populating Next Right Pointers in Each Node II
- leetcode 117. Populating Next Right Pointers in Each Node II
- LeetCode 117. Populating Next Right Pointers in Each Node II
- leetcode 117. Populating Next Right Pointers in Each Node II
- 网络爬虫-使用Cookie登陆
- 如何制作swift framework
- 响应式和自适应的区别
- LeetCode 406. Queue Reconstruction by Height (Medium)
- hadoop是大数据火爆的助燃剂
- leetcode 117. Populating Next Right Pointers in Each Node II BFS广度优先遍历
- 简单理解观察者模式
- [PDF]AI 机器学习 深度学习 经典书籍汇总下载
- AppSettings 的使用
- Open Refine能学到什么
- 从程序员到CTO的Java技术路线图
- Python学习笔记——文件操作
- 解决Sources for 'Android API 26 Platform' not found
- 财务预警项目总结