Populating Next Right Pointers in Each Node

原创 2015年11月20日 23:43:45

题目: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

思路:

递归和非递归的思路差不多,简单说下递归吧:

根节点的位置比较特殊,不需要往右边链接的,但是到了下面,就要判断一下额外的条件了,一个是自身右边的链接是否打通还有一个就是自身是否有右节点,没有直接返回,有的话就是自身右节点孩子的next 指向自身 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==NULL)  return ;
        if(root->left&&root->right){
            root->left->next=root->right;
        }
        if(root->next&&root->left){//到了非根节点的时候
            root->right->next=root->next->left;
        }
        
        connect(root->left);connect(root->right);
    }
*/    
    void connect(TreeLinkNode *root){
        if(root==NULL)  return ;
        
        while(root&&root->left){
            TreeLinkNode *tmp=root->left;
            while(root){
                root->left->next=root->right;
                if(root->next){
                    root->right->next=root->next->left;
                }
                root=root->next;
            }
            root=tmp;
        }
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

【LeetCode-面试算法经典-Java实现】【116-Populating Next Right Pointers in Each Node(二叉树链接右指针)】

【116-Populating Next Right Pointers in Each Node(二叉树链接右指针)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Giv...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月12日 06:30
  • 3039

Populating Next Right Pointers in Each Node -- LeetCode

原题链接: http://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/  这道题是要将一棵树的每一层维护...
  • linhuanmars
  • linhuanmars
  • 2014年04月12日 03:11
  • 10270

[leetcode] 117. Populating Next Right Pointers in Each Node II 解题报告

题目链接:https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ Follow up for p...
  • qq508618087
  • qq508618087
  • 2016年01月13日 06:36
  • 985

LeetCode 116 Populating Next Right Pointers in Each Node 解题报告

Populating Next Right Pointers in Each Node Total Accepted: 44163 Total Submissions: 122231Given a ...
  • a363344923
  • a363344923
  • 2015年03月30日 20:44
  • 1368

[LeetCode]Populating Next Right Pointers in Each Node II, 解题报告

前言 今天上午从9点半开始就做了这么一道题目,还是挺有意思的,这里记录一下 题目 Follow up for problem "Populating Next Right Pointer...
  • zinss26914
  • zinss26914
  • 2013年12月19日 11:17
  • 7605

Populating Next Right Pointers in Each Node II 任意(非完美)二叉树添加next指针 @LeetCode

这道题有些tricky,有时间回头再研究一下 package Level4; import Utility.TreeLinkNode; /** * Populating Next Right...
  • hellobinfeng
  • hellobinfeng
  • 2013年11月21日 04:45
  • 3386

[leetcode]117. Populating Next Right Pointers in Each Node II

注意一个事实:到根节点的左子节点的next要么指向根节点的右子节点(右子节点不为空),要么就指向根节点的next(或者next的next)节点p,直到该p节点具有下一代的节点。也就是说,将每一层的ne...
  • zorelemn
  • zorelemn
  • 2016年04月14日 16:13
  • 278

Hard-题目6:117. Populating Next Right Pointers in Each Node II

题目原文: Follow up for problem “Populating Next Right Pointers in Each Node”.What if the given tree co...
  • cmershen
  • cmershen
  • 2016年05月31日 23:24
  • 298

【LeetCode with Python】 Populating Next Right Pointers in Each Node

Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; ...
  • nerv3x3
  • nerv3x3
  • 2014年07月04日 16:26
  • 1286

Leetcode 树 Populating Next Right Pointers in Each Node II

题意:给定一棵任意二叉树(不一定是perfect binary tree),将它每一个节点的next指针都指向该节点右边的节点 思路:bfs 这里不能用dfs了,只能用bfs bfs遍历将同一层的节点...
  • zhsenl
  • zhsenl
  • 2014年05月13日 22:19
  • 1028
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Populating Next Right Pointers in Each Node
举报原因:
原因补充:

(最多只允许输入30个字)