117. Populating Next Right Pointers in Each Node II
来源:互联网 发布:软件测试项目心得体会 编辑:程序博客网 时间:2024/05/16 09:02
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
Subscribe to see which companies asked this question
low一点的方法:同116 Populating Next Right Pointers in Each Node,的方法一一样,采用层次遍历的思想来解决,但运行时间长点,代码:
void connect(TreeLinkNode *root) { if(NULL == root) return; queue<TreeLinkNode*> que; que.push(root); int curLenNode = 1; TreeLinkNode* pre = NULL; while(!que.empty()) { TreeLinkNode *temp = que.front(); que.pop(); curLenNode --; if(pre != NULL) pre->next = temp; pre = temp; if(temp->left) que.push(temp->left); if(temp->right) que.push(temp->right); if(curLenNode == 0) { pre = NULL; //注意在每一层遍历结束,都要将pre设置为NULL,否则Pre保留的是上一层的最后一个节点,故而会有问题 temp->next = NULL;//最每一层的最后会将当前层的最后一个节点的next赋值为NULL curLenNode = que.size(); } } }
更好的方法值得推敲:
public void connect(TreeLinkNode root) { TreeLinkNode head = null; //head of the next level TreeLinkNode prev = null; //the leading node on the next level TreeLinkNode cur = root; //current node of current level while (cur != null) { while (cur != null) { //iterate on the current level //left child if (cur.left != null) { if (prev != null) { prev.next = cur.left; } else { head = cur.left; } prev = cur.left; } //right child if (cur.right != null) { if (prev != null) { prev.next = cur.right; } else { head = cur.right; } prev = cur.right; } //move to next node cur = cur.next; } //move to next level cur = head; head = null; prev = null; } }
更好的方法二:
https://discuss.leetcode.com/topic/18119/simple-40ms-c-o-n-o-1-solution-with-only-one-while-loop
- 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
- 117. Populating Next Right Pointers in Each Node II
- [leetcode] 117.Populating Next Right Pointers in Each Node II
- 116. Populating Next Right Pointers in Each Node && 117. 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
- 117. Populating Next Right Pointers in Each Node II
- LeetCode 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- Leetcode 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- [LeetCode] 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- 117. Populating Next Right Pointers in Each Node II
- 剑指offer笔记
- 聊聊Twemproxy是什么
- javascript字典类
- ctivity的切换问题(activity与栈)
- Android Studio 与Git 上传项目与下载项目流程
- 117. Populating Next Right Pointers in Each Node II
- 不朽凡人 > 第五百二十九章 你的游戏别找我
- 指定 FTP 用户主目录与访问目录
- 修改CentOS7系统默认运行级别
- Intent的学习笔记
- 写文本文件
- 层序遍历二叉树
- 基本的.net中Post请求的写法
- 谁在说谎