博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
117. Populating Next Right Pointers in Each Node II - Medium
阅读量:6518 次
发布时间:2019-06-24

本文共 1807 字,大约阅读时间需要 6 分钟。

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.
  • Recursive approach is fine, implicit stack space does not count as extra space for this problem.

Example:

Given the following binary tree,

1   /  \  2    3 / \    \4   5    7

After calling your function, the tree should look like:

1 -> NULL   /  \  2 -> 3 -> NULL / \    \4-> 5 -> 7 -> NULL

 

这题和  不同的是本题的树不是perfect tree,每个节点并不是都有左右子节点

用dummy指向每层的首节点的前一个节点,用cur遍历这一层,然后连下一层的next。从root开始,如果左子节点存在,cur的next连上左子节点,然后cur指向其next指针;如果右子节点存在,cur的next连右子节点,然后cur指向其next指针。此时移动root,指向其next指针,如果此时root为null,说明当前层已经遍历完,重置cur为dummy结点,root此时为dummy.next,即下一层的首节点,然后dummy的next指针清空

 time: O(n), space: O(1)

/** * Definition for binary tree with next pointer. * public class TreeLinkNode { *     int val; *     TreeLinkNode left, right, next; *     TreeLinkNode(int x) { val = x; } * } */public class Solution {    public void connect(TreeLinkNode root) {        if(root == null) {            return;        }        TreeLinkNode dummy = new TreeLinkNode(0);        TreeLinkNode cur = dummy;                while(root != null) {            if(root.left != null) {                cur.next = root.left;                cur = cur.next;            }            if(root.right != null) {                cur.next = root.right;                cur = cur.next;            }            root = root.next;            if(root == null) {                cur = dummy;                root = dummy.next;                dummy.next = null;            }        }    }}

 

转载于:https://www.cnblogs.com/fatttcat/p/10205207.html

你可能感兴趣的文章
猫猫学IOS(三十)UI之Quartz2D画图片画文字
查看>>
ethereumjs/merkle-patricia-tree-2-API
查看>>
go标准库的学习-runtime
查看>>
NodeJS学习之文件操作
查看>>
AJAX的get和post请求原生编写方法
查看>>
WebSocket 是什么原理?为什么可以实现持久连接
查看>>
Python自学笔记-logging模块详解
查看>>
Head First--设计模式
查看>>
iOS之CAGradientLayer属性简介和使用
查看>>
微信小程序UI组件、开发框架、实用库
查看>>
模块化Javascript代码的两种方式
查看>>
Money去哪了- 每日站立会议
查看>>
Python数据结构和算法学习笔记1
查看>>
正则之从dom字符串中提取url
查看>>
大数据——基础概念
查看>>
机器学习温和指南
查看>>
最短路-Bellman-Ford算法
查看>>
Object 类有哪些方法
查看>>
oracle 将一个表复制到另外一个表里 .
查看>>
访问者模式
查看>>