LeetCode Populating Next Right Pointers in Each Node
2015-09-10 02:48
633 查看
原题链接在这里:https://leetcode.com/problems/populating-next-right-pointers-in-each-node/
题目:
Given a binary tree
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to
Initially, all next pointers are set to
Note:
You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
After calling your function, the tree should look like:
题解:
递归调用,如果root.next不为null, root.right.next 等于 root.next.left, 然后root.left.next指向root.right.
Time Complexity: O(n), 每个点访问不超过两遍. Space: O(logn).
AC Java:
Iteration版本
Time Complexity: O(n). Space: O(1).
跟上Populating Next Right Pointers in Each Node II
题目:
Given a binary tree
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to
NULL.
Initially, all next pointers are set to
NULL.
Note:
You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1 / \ 2 3 / \ / \ 4 5 6 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ / \ 4->5->6->7 -> NULL
题解:
递归调用,如果root.next不为null, root.right.next 等于 root.next.left, 然后root.left.next指向root.right.
Time Complexity: O(n), 每个点访问不超过两遍. Space: O(logn).
AC Java:
/** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * TreeLinkNode(int x) { val = x; } * } */ public class Solution { public void connect(TreeLinkNode root) { if(root == null){ return; } if(root.right != null && root.next != null){ root.right.next = root.next.left; } if(root.left!=null){ root.left.next = root.right; } connect(root.right); connect(root.left); } }
Iteration版本
Time Complexity: O(n). Space: O(1).
/** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * TreeLinkNode(int x) { val = x; } * } */ public class Solution { public void connect(TreeLinkNode root) { TreeLinkNode head = root; while(head != null){ TreeLinkNode nextDummy = new TreeLinkNode(0); TreeLinkNode cur = nextDummy; while(head != null){ if(head.left != null){ cur.next = head.left; cur = cur.next; } if(head.right != null){ cur.next = head.right; cur = cur.next; } head = head.next; } head = nextDummy.next; } } }
跟上Populating Next Right Pointers in Each Node II
相关文章推荐
- CCNode解析
- 转-windows系统下简单nodejs安装及环境配置
- node.js querystring处理参数
- populate next right pointer in each node
- LeetCode -- Remove Nth Node from End of List
- Nodejs课堂笔记-第二课 package.json的作用
- 【前端学习笔记】2015-09-09~~~~nodejs中的require()和module.exports
- UVa 10223 - How many nodes ?
- 使用nvm进行node多版本管理
- GDataXMLNode配置
- chef client注册为node
- Node.js进程通信模块child_process
- 有 JavaScript 基础,怎么学习 Node.js
- Node-RSA 验证签名
- Node.js 4.0正式发布,支持ES6新特性
- Node.js 4.0.0 正式发布了
- NodeJs API
- hexo异常:/usr/bin/env: node: 没有那个文件或目录
- Nodejs课堂笔记—第一课:修改Webstorm的默认主题
- leetcode - Swap Nodes in Pairs