Populating Next Right Pointers in Each Node II 寻找右节点(重重重)
来源:互联网 发布:python to datetime 编辑:程序博客网 时间:2024/05/21 06:42
题目:
点击打开链接
解答:
方法与Populating Next Right Pointers in Each Node类似,需要从上至下,逐层寻找右节点。
对于一个根节点,我们这样求解:
他的左子树:
1 右子树存在,那么右节点就是右子树。
2 右子树不存在,首先寻找到父节点的右节点,如果父节点的右节点有子树,那么此左子树的右节点就是其子树,如果父节点的右节点没有子树,递归寻找父节点的右节点后面的右节点,直到有子树或者为空。
他的右子树:
1 寻找父节点右节点,做上述2步骤。
递归求该父节点的左右子树。
这里需要注意的是,需要先递归求解右子树,再求左子树,否则在上面的第二步过程中会出现父节点的右节点的右节点还未求解的情况。
图片示意一个节点的右子树是如何寻找其父节点的右节点的右节点的左子树为其有节点的。
代码:
#include <iostream>#include<algorithm>#include <cstdlib>#include <vector>#include <stack>#include <string>#include <map>#include <queue>#include <unordered_set>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) { if (root == NULL) return; //处理左子树 if (root->left) { //如果右子树存在,那么next就是右子树 if (root->right) root->left->next = root->right; //右子树不存在 else { TreeLinkNode *temp; temp = root->next; //递归寻找一个存在子节点的next节点,直到为空 while (1) { if (temp == NULL || temp->left || temp->right) break; temp = temp->next; } //如果不是空节点 if (temp) { //节点的左子树存在 if (temp->left) root->left->next = temp->left; //节点的右子树存在 else if (temp->right) root->left->next = temp->right; } } } if (root->right) { TreeLinkNode *temp; temp = root->next; //递归寻找一个存在子节点的next节点,直到为空 while (1) { if (temp == NULL || temp->left || temp->right) break; temp = temp->next; } //如果不是空节点 if (temp) { //节点的左子树存在 if (temp->left) root->right->next = temp->left; //节点的右子树存在 else if (temp->right) root->right->next = temp->right; } } connect(root->right); connect(root->left); } };int main(){Solution sl;TreeLinkNode *root = new TreeLinkNode(2);root->left = new TreeLinkNode(1);root->right = new TreeLinkNode(3);root->left->left = new TreeLinkNode(0);root->left->right = new TreeLinkNode(7);root->left->right->left = new TreeLinkNode(1);root->left->right->right = new TreeLinkNode(0);root->left->right->right->left = new TreeLinkNode(7);root->right->left = new TreeLinkNode(9);root->right->right = new TreeLinkNode(1);root->right->right->left = new TreeLinkNode(8);root->right->right->right = new TreeLinkNode(8);sl.connect(root);cout << "-------";getchar();return 0;}
0 0
- 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(右邻)
- Populating Next Right Pointers in Each Node II (hard)
- populating-next-right-pointers-in-each-node(i,ii)
- 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 II
- Populating Next Right Pointers in Each Node 找出每个节点的下一节点(重重)二叉树
- LeetCode Populating Next Right Pointers in Each Node II
- [Leetcode] Populating Next Right Pointers in Each Node II
- [LeetCode] Populating Next Right Pointers in Each Node II
- leetcode 79: Populating Next Right Pointers in Each Node II
- [Leetcode] Populating Next Right Pointers in Each Node ii
- leetcode Populating Next Right Pointers in Each Node II
- 【leetcode】Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- 控件与布局
- 简单工厂模式
- C# 利用bat文件轻松创建windos 服务
- 你总是喜欢抓不住的东西
- 笔记本怎么设置WIfi热点
- Populating Next Right Pointers in Each Node II 寻找右节点(重重重)
- libpcap示例
- 你会问问题吗
- 第十章 10.3.3节练习
- jQuery Easy UI的使用
- VisualC++信息安全编程
- JAVA三个移位运算符 << 、>> 、>>>是啥意思
- iOS 改变字母的大小写
- 人性