[LeetCode][Java] Populating Next Right Pointers in Each Node

来源:互联网 发布:淘宝卖假货店铺 编辑:程序博客网 时间:2024/05/16 09:26

题目:

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

题意:

给定一棵二叉树,最初每个节点的右指针都为空。现在要求将每个节点和其右指针相连,如果右指针不存在,指为NULL.最终的效果如上图所示.

算法分析:

 一个递归就搞定了,就是递归让每一个节点他的左右子树通过next链接,直至到最后一层,然后递归左右节点,继续让他们的左右子树通过next链接。

代码如下:

public class Solution {    public void connect(TreeLinkNode root)     {        if (root==null) return;        TreeLinkNode lr = root.left;        TreeLinkNode rl = root.right;                while(lr!=null && rl!=null)        {            lr.next = rl;            lr = lr.right;            rl = rl.left;        }        connect(root.left);        connect(root.right);    }}


0 0