LeetCode 题解(60): Populating Next Right Pointers in Each Node
来源:互联网 发布:淘宝收二手手机 编辑:程序博客网 时间:2024/06/08 07:59
题目:
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 toNULL
.
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
题解:
直接上了一种可以解决不完全二叉树的方法,不过写的比较复杂。总体思想是递归处理下一层的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) return; TreeLinkNode* temp = root; while(temp->next) temp = temp->next; temp->next = NULL; TreeLinkNode* newRoot = find(root, NULL); TreeLinkNode* preNode = find(root, NULL); while(preNode) { TreeLinkNode* nextNode = find(root, preNode); preNode->next = nextNode; preNode = nextNode; } connect(newRoot); return; } TreeLinkNode* find(TreeLinkNode* root, TreeLinkNode* first) { TreeLinkNode* result = NULL; if(!first) { while(root && !result) { if(root->left) { result = root->left; } else if(root->right) { result = root->right; } else { root = root->next; } } } else { while(root && !result) { if(root->left == first) { if(root->right) { result = root->right; } else { root = root->next; while(root && !result) { if(root->left) { result = root->left; } else if(root->right) { result = root->right; } else { root = root->next; } } } } else if(root->right == first) { root = root->next; while(root && !result) { if(root->left) { result = root->left; } else if(root->right) { result = root->right; } else { root = root->next; } } } else { root = root->next; } } } return result; }};
网上学来针对完全二叉树的简便解法,依然是递归,但是左右子树分别递归。
class Solution {public: void connect(TreeLinkNode *root) { if(!root) return; if(root->left) root->left->next = root->right; if(root->right) if(root->next) root->right->next = root->next->left; else root->right->next = NULL; connect(root->left); connect(root->right); return; }};
Java版:
public class Solution { public void connect(TreeLinkNode root) { if(root == null) return; if(root.left != null) root.left.next = root.right; if(root.right != null) if(root.next != null) root.right.next = root.next.left; else root.right.next = null; connect(root.left); connect(root.right); }}
Python版:
class Solution: # @param root, a tree node # @return nothing def connect(self, root): if root == None: return if root.left != None: root.left.next = root.right if root.right != None: if root.next != None: root.right.next = root.next.left else: root.right.next = None self.connect(root.left) self.connect(root.right)
0 0
- LeetCode题解:Populating Next Right Pointers in Each Node
- LeetCode题解:Populating Next Right Pointers in Each Node
- LeetCode 题解(60): Populating Next Right Pointers in Each Node
- **(leetcode) Populating Next Right Pointers in Each Node
- LeetCode(116) Populating Next Right Pointers in Each Node
- 【LeetCode】Populating Next Right Pointers in Each Node Populating Next Right Pointers in Each Node II
- leetcode Populating Next Right Pointers in Each Node &&Populating Next Right Pointers in Each Node||
- LeetCode Populating Next Right Pointers in Each Node & Populating Next Right Pointers in Each Node I
- LeetCode 题解(61): Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node题解
- 【Leetcode】Populating Next Right Pointers in Each Node in JAVA
- LeetCode Populating Next Right Pointers in Each Node
- LeetCode Populating Next Right Pointers in Each Node II
- [Leetcode] Populating Next Right Pointers in Each Node
- LeetCode: Populating Next Right Pointers in Each Node
- [Leetcode] Populating Next Right Pointers in Each Node II
- [LeetCode] Populating Next Right Pointers in Each Node
- [LeetCode] Populating Next Right Pointers in Each Node II
- spark shell的学习
- 计算机内存分配以及java中的内存分配
- Oracle 树操作(select…start with…connect by…prior)
- MySQL索引的创建、删除和查看
- 使用position:relative制作下边框下的小三角
- LeetCode 题解(60): Populating Next Right Pointers in Each Node
- 迭代器比较 const_iterator
- 联通网络环境上无法访问http://repo1.maven.org/maven2/中央库解决,镜像库添加
- NEERC 2013 Dwarf Tower (最短路)
- redis源码学习
- 谈谈Objective-C的警告
- 谈谈DOMContentLoaded:Javascript中的domReady引入机制
- MFC 小知识总结三
- HDU5100Chessboard(数论)