当前位置: 代码迷 >> 综合 >> [LeetCode73]Populating Next Right Pointers in Each Node II
  详细解决方案

[LeetCode73]Populating Next Right Pointers in Each Node II

热度:32   发布时间:2024-01-04 07:39:40.0

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);}




  相关解决方案