LeetCode 第117题 填充每个节点的下一个右侧节点指针||

给定一个二叉树

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

示例:

 1 class Solution117 {
 2
 3   public Node connect(Node root) {
 4     if (root == null) {
 5       return null;
 6     }
 7
 8     //node直接走到root的右兄弟处(根结点时,直接为null)
 9     Node node = root.next;
10
11     //找到root的 右兄弟 中从左往右第一个不为空的孩子结点(如果没有,则找下一个右兄弟,直到没有右兄弟为止->null)
12     while (node != null) {
13       if (node.left != null) {
14         node = node.left;
15         break;
16       } else if (node.right != null) {
17         node = node.right;
18         break;
19       } else {
20         node = node.next;
21       }
22     }
23
24     //如果左孩子不为空,就要替他找一个伴侣. 向右看第一个不为空的孩子.(右孩子 | 上一步中找到的左往右第一个不为空的孩子结点
25     if (root.left != null) {
26       root.left.next = (root.right == null ? node : root.right);
27     }
28
29     //如果右孩子不为空,也要替他找一个伴侣. 即上一步中找到的左往右第一个不为空的孩子结点
30     if (root.right != null) {
31       root.right.next = node;
32     }
33
34     //先扫描右孩子再扫描左孩子.
35     connect(root.right);
36     connect(root.left);
37
38     return root;
39   }
40
41 }

原文地址:https://www.cnblogs.com/rainbow-/p/10505623.html

时间: 2024-09-30 04:43:49

LeetCode 第117题 填充每个节点的下一个右侧节点指针||的相关文章

[LeetCode] 116. 填充每个节点的下一个右侧节点指针

题目链接 : https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 题目描述: 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next

[leetcode-117]填充每个节点的下一个右侧节点指针 II

(1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next 指针设置为 NULL. 初始状态下,所有 next 指针都被设置为 NULL. 示例:For example, Given the following binary tree

LeetCode OJ:Populating Next Right Pointers in Each Node II(指出每一个节点的下一个右侧节点II)

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 tr

leetcode 116填充每个节点的下一个右侧节点指针

time O(n) ,sapce O(n) /* // Definition for a Node. class Node { public: int val; Node* left; Node* right; Node* next; Node() {} Node(int _val, Node* _left, Node* _right, Node* _next) { val = _val; left = _left; right = _right; next = _next; } }; */ /

116.填充每个节点的下一个右侧节点指针(DFS)

2019-12-27 08:52:23 解法1:DFS 递归解决 /* // Definition for a Node. class Node { public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {

4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。

5 / 2 6 / \ 1 4 7 / 3 class Node{ Node left; Node right; Node parent; int val; } /** 1.如果有右子树,则结果为右子树的最左节点. 2.如果没有右子树,则需要回到父节点,如果当前节点是父节点的左子树,则父节点就是结果,如果不是继续向上再找父节点. */ public TreeNode inorderSucc(TreeNode n){ if(n==null) return null; if(n.right!=nul

找到下一个“元素节点”通用函数

//下一个元素节点通用函数 function getNextElement(node){ if(node.nodeType == 1){ return node; } //元素下一个节点,继续执行本次函数,循环,一直到找到下一个元素节点为止,则退出本次循环 if(node.nextSibling){         return getNextElement(node.nextSibling); } return null; }

JS函数:返回下一个元素节点

1 //寻找先一个元素节点的函数,把一个元素的下一个节点(nextSibing)作为参数传给该函数,经过筛选返回元素节点 2 function nextElementSiblings(node){ 3 if(node.nodeType == 1){ 4 return node; 5 } 6 if(node.nextSibling){ 7 return nextElementSiblings(node.nextSibling); 8 } 9 return null; 10 }

NodeVisitor的使用-遍历Geode节点并在它与父节点之间添加一个LOD节点

#include <osg\NodeVisitor>#include <osg\MatrixTransform>#include <osg\PagedLOD>#include <osgDB\FileNameUtils>#include <osg\Geode>#include <strstream> //只能处理osgExp插件导出的单个ive文件class InsideLODVisitor : public osg::NodeVisi