源题目

https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/

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

难度中等526
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node { int val; Node left; Node right; Node *next; }
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。

进阶:

  • 你只能使用常量级额外空间。
  • 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。

示例:
广度/ 深度优先搜索--LeetCode 116. 填充每个节点的下一个右侧节点指针 - 图1
输入:root = [1,2,3,4,5,6,7] 输出:[1,#,2,3,#,4,5,6,7,#] 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,’#’ 标志着每一层的结束。

提示:

  • 树中节点的数量少于 4096
  • -1000 <= node.val <= 1000

通过次数143,995
提交次数205,087

  1. /**
  2. * Definition for a Node.
  3. * class Node {
  4. * function __construct($val = 0) {
  5. * $this->val = $val;
  6. * $this->left = null;
  7. * $this->right = null;
  8. * $this->next = null;
  9. * }
  10. * }
  11. */
  12. class Solution {
  13. /**
  14. * @param Node $root
  15. * @return Node
  16. */
  17. public function connect($root) {
  18. if(!$root || (!$root->left && !$root->right)) return $root;
  19. $this->inOrder($root);//插入节点
  20. return $root;
  21. }
  22. function inOrder(&$root){
  23. if(!$root || !$root->left) return null;
  24. $root->left->next = $root->right;
  25. if($root->next) $root->right->next = $root->next->left;
  26. $this->inOrder($root->left);
  27. $this->inOrder($root->right);
  28. }
  29. }