[LeetCode73]Populating Next Right Pointers in Each Node II

本文深入探讨了在任意二叉树结构中实现节点连接的方法,通过实例展示了一种在不使用额外空间的情况下,高效地为每个节点设置下一个节点指针的解决方案。该方法首先寻找第一个有效的next链接节点,并在递归处理子树时遵循右子树到左子树的顺序。

Follow up for problem "Populating Next Right Pointers in Each Node".

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

For 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

Analysis:

与上一题类似,唯一的不同是每次要先找到一个第一个有效的next链接节点,并且递归的时候要先处理右子树,再处理左子树.

Java

public void connect(TreeLinkNode root) {
        if(root ==null) return;
        TreeLinkNode p = root.next;
        while(p!=null){
        	if(p.left!=null){
        		p = p.left;
        		break;
        	}
        	if(p.right!=null){
        		p = p.right;
        		break;
        	}
        	p = p.next;
        }
        if(root.right!=null)
        	root.right.next = p;
        if(root.left!=null)
        	root.left.next = root.right != null ? root.right:p;
        connect(root.right);
        connect(root.left);
    }

c++

void connect(TreeLinkNode *root) {
        if(root == NULL) return;
     TreeLinkNode *p = root->next;
     while(p != NULL){
        if(p->left != NULL){
            p = p->left;
            break;
        }
        if(p->right != NULL){
            p = p->right;
            break;
        }
        p = p->next;
     }
     if(root->right != NULL){
        root->right->next = p;
     }
     if(root->left != NULL){
        root->left->next = root->right ? root->right : p;
     }
     connect(root->right);
     connect(root->left);
    }




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值