[LeetCode73]Populating Next Right Pointers in Each Node II

来源:互联网 发布:php include 来源 编辑:程序博客网 时间:2024/05/22 15:45

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




0 0
原创粉丝点击