package com.wsq.leetcode;
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
}
public class ConnectNextNode {
public Node connect(Node root) {
dfs(root);
return root;
}
public void dfs(Node currNode) {
if(currNode == null) {
return;
}
if(currNode.right != null) {
if (currNode.next != null) {
Node tmpNode = currNode.next;
while(tmpNode != null) {
if(tmpNode.left != null || tmpNode.right != null) {
break;
}
tmpNode = tmpNode.next;
}
if(tmpNode != null) {
if(tmpNode.left != null) {
currNode.right.next = tmpNode.left;
}else {
currNode.right.next = tmpNode.right;
}
}
}
}
if(currNode.left != null) {
if(currNode.right != null) {
currNode.left.next = currNode.right;
}else if(currNode.next != null){
Node tmpNode = currNode.next;
while(tmpNode != null) {
if(tmpNode.left != null || tmpNode.right != null) {
break;
}
tmpNode = tmpNode.next;
}
if(tmpNode != null) {
if(tmpNode.left != null) {
currNode.left.next = tmpNode.left;
}else {
currNode.left.next = tmpNode.right;
}
}
}
}
dfs(currNode.right);
dfs(currNode.left);
}
public static void main(String[] args) {
Integer[] arr = {1,2,3,4,5,null,7};
Node head = buildTree(arr, 0);
ConnectNextNode cn = new ConnectNextNode();
cn.connect(head);
System.out.println(head.val);
}
public static Node buildTree(Integer[] a, int pos) {
if(pos >= a.length || a[pos] == null) {
return null;
}
Node root = new Node(a[pos]);
root.left = buildTree(a, 2 * pos + 1);
root.right = buildTree(a, 2 * pos + 2);
return root;
}
}