【LeetCode题目记录-7】为完全二叉树添加层指针

Populating Next Right Pointers in Each Node

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

【分析1-原创】本质是游标思想的分层遍历,本博客里面有相关代码,最初似乎是《编程之美》中的类似题目,即“二叉树分层遍历”。

/**
     * Definition for binary tree with next pointer.
     * public class TreeLinkNode {
     *     int val;
     *     TreeLinkNode left, right, next;
     *     TreeLinkNode(int x) { val = x; }
     * }
     */
    public void connect(TreeLinkNode root) {
        if(root==null) return;
        List<TreeLinkNode> list=new ArrayList<TreeLinkNode>();
        list.add(root);
        int cur=0;
        while(cur<list.size()){
            int last=list.size();
            while(cur<last){
               TreeLinkNode temp=list.get(cur);
            if(temp.left!=null){
             list.add(temp.left);
            }
             if(temp.right!=null){
             list.add(temp.right);
            }
            if(cur<last-1){
                list.get(cur).next=list.get(cur+1);
            }
             cur++;
            }

        }

}

【分析2-非原创】上面的遍历符合各种类型的二叉树,不一定非得是完全二叉树,而题目中限定了perfect binary tree。可以用更简洁的方法。例如,可以通过pre.left来判断是否探底。

参考:https://oj.leetcode.com/discuss/7327/a-simple-accepted-solution

void connect(TreeLinkNode *root) {
    if (root == NULL) return;
    TreeLinkNode *pre = root;
    TreeLinkNode *cur = NULL;
    while(pre->left) {
        cur = pre;
        while(cur) {
            cur->left->next = cur->right;
            if(cur->next) cur->right->next = cur->next->left;
            cur = cur->next;
        }
        pre = pre->left;
    }
}
时间: 2024-10-05 19:43:10

【LeetCode题目记录-7】为完全二叉树添加层指针的相关文章

【LeetCode题目记录-10】已排序的数组去除重复元素

Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory.

【LeetCode题目记录-2】从前序遍历和中序遍历构建二叉树

Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. [分析1-非原创]递归调用. 参考:http://bylijinnan.iteye.com/blog/135

【LeetCode题目记录-4】插入数组间隔问题

Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Example 1: Given intervals [1,3],[6,9], i

【LeetCode题目记录-5】二叉树是否相同

Same Tree Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. [分析1-原创]递归判断 /** * Definition for binary tree * public c

【LeetCode题目记录-9】排序后的数组生成平衡的二叉搜索树

Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending order, convert it to a height balanced BST. [分析1-原创]中间值作为根节点,左边的中间值作为左孩子,右边的中间值作为右孩子.一直递归探底即可. /** * Definition for binary tree * public class TreeNode {

【LeetCode题目记录-11】判断二叉树是否是镜像的(对称的)

Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree is symmetric:     1    / \   2   2 / \ / \ 3  4 4  3 But the following is not:     1    / \   2   2    \   \  

【LeetCode题目记录-13】二分搜索排序后的二维数组

Search a 2D Matrix Writean efficient algorithm that searches for a value in an m x n matrix.This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer o

【LeetCode题目记录-6】1~n作为key可以有多少种二叉搜索树(BST)的形式

Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's. 1         3     3      2      1 \       /     /      / \      \ 3    

【LeetCode题目记录-8】从排序后的单链表中去除重复元素

Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3. [分析-原创]相等的话nextNode后移即可,