二叉树——116. 填充每个节点的下一个右侧节点指针
二叉树——116. 填充每个节点的下一个右侧节点指针
题目:

示例:

思路:
这个题还是要贯彻二叉树的解题思路:要明白需要对结点进行什么操作,还有就是要确定遍历顺序。
本题显而易见就是让做结点指向右节点,但是这并不是全部,从示例可以看出对于父节点相同的情况是左子节点指向右子节点,但是对于父节点不相同的情况,这种操作就不适用了。
接下来就是针对跨越父节点的情况,思考一下应该怎么操作,即node->right->next = node->next->left。
至于遍历顺序,肯定是我们先对中间结点操作,然后递归左,再是递归右,是很显而易见的前序遍历。
代码:
class Solution {
public:
Node* connect(Node* root) {
if(root == NULL) return nullptr;
connect2Node(root);
return root;
}
void connect2Node(Node* node){
if(node->left){
/**前序遍历**/
// 相同父节点时的操作
node->left->next = node->right;
// 跨越不同父节点的操作
if(node->next) node->right->next = node->next->left;
connect2Node(node->left); // 左
connect2Node(node->right); // 右
}
}
};
Rank:


浙公网安备 33010602011771号