leetcode第116题填充每个节点的下一个右侧指针
第一种方式:
难点还是在于:如何把题目的要求细化为每个节点需要做的事情,但是如果只依赖一个节点的话,是没有办法跨父节点进行连接的.
//难点在于如何将父节点不相同的子节点进行连接 需要进行拆分
class Solution {
public Node connect(Node root) {
if (root == null) {
return null;
}
connextNode(root.left, root.right);
return root;
}
public Node connextNode(Node Node1, Node Node2) {
if (Node1 == null || Node2 == null) {
return null;
}
//这里对链表进行操作
Node1.next = Node2;
//连接父节点相同的子节点,
connextNode(Node1.left, Node1.right);
connextNode(Node2.left, Node2.right);
//连接跨越父节点的两个子节点
connextNode(Node1.right, Node2.left);
return Node1;
}
}
**第二种方式:**找规律,相邻的节点进行串联
class Solution {
public Node connect(Node root) {
if (root == null) {
return null;
}
dfs(root);
return root;
}
//深搜进行操作
void dfs(Node root) {
if (root == null) {
return;
}
Node left = root.left;
Node right = root.right;
while (left != null) {
left.next = right;
left = left.right;
right = right.left;
}
dfs(root.left);
dfs(root.right);
}
}