[leetcode][tree][dfs] Populating Next Right Pointers in Each Node
来源:互联网 发布:学弹钢琴软件 编辑:程序博客网 时间:2024/06/05 21:05
题目:
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
/** * 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://注意题目中说明输入是满二叉树,用先序遍历,关键是利用上一层已经求出的next域//root的左孩子的next是右孩子,root的右孩子的next是root->next的左孩子 void connect(TreeLinkNode *root) { if(NULL == root || NULL == root->left && NULL == root->right) return;//叶节点没有左右孩子,直接返回 root->left->next = root->right; root->right->next = root->next ? root->next->left : NULL; connect(root->left); connect(root->right); }};
按层遍历实现:
/** * 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://按层遍历TreeLinkNode *curLevelFirst = NULL; void connect(TreeLinkNode *root) { if(NULL == root || NULL == root->left) return; if(NULL == curLevelFirst) curLevelFirst = root; root->left->next = root->right; root->right->next = root->next ? root->next->left : NULL; if(root->next) connect(root->next); else{ curLevelFirst = curLevelFirst->left; connect(curLevelFirst); } }};
0 0
- [leetcode][tree][dfs] Populating Next Right Pointers in Each Node
- Leetcode - Tree- Populating Next Right Pointers in Each Node
- LeetCode[Tree]: Populating Next Right Pointers in Each Node
- LeetCode[Tree]: Populating Next Right Pointers in Each Node II
- LeetCode[Tree]: Populating Next Right Pointers in Each Node II
- [leetcode][tree] Populating Next Right Pointers in Each Node II
- 【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
- 116:Populating Next Right Pointers in Each Node【树】【DFS】
- DFS&遍历 Populating Next Right Pointers in Each Node
- (M)DFS:116. Populating Next Right Pointers in Each Node
- 【Leetcode】Populating Next Right Pointers in Each Node in JAVA
- Tree-----116. Populating Next Right Pointers in Each Node 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
- jsp/java连接数据库mysql DbManager类
- navicat for mysql只导出数据表结构
- 转:设计模式6大原则
- jvm参数
- startActivityForResult和setResult详解
- [leetcode][tree][dfs] Populating Next Right Pointers in Each Node
- linux keypad driver
- 跟踪EXPORT_SYMBOL
- svn多分支合并主干冲突 svn Working copy and merge source not ready for reintegration
- cookie和session的区别
- glClearBufferSubData
- 移动端基本touch事件实现
- MMU初始化
- Spring Batch示例: 读取CSV文件并写入MySQL数据库