二叉树刷题第二弹
114.二叉树展开为链表
114.
这道题的函数定义就是将一个结点的树展开为链表,然后现在左右子树都已经展开为链表,所以我们要做的就是将左右子树也合成一个链表,这道题属于后序遍历的写法,因为不需要返回什么,所以函数没有返回值。
void flatten(struct TreeNode* root){
if(root==NULL){
return;
}
flatten(root->right);
flatten(root->left);
struct TreeNode* temp;
temp=root->right;
root->right=root->left;
root->left=NULL;
while(root->right!=NULL)
{
root=root->right;
}
root->right=temp;
}
116.填充每个结点的下一个右侧结点指针
116.
这道题需要我们去增加参数,题目给定了一个完美二叉树,我们创建一个函数,函数定义是连接传入的两个结点
void connectTwoNode(struct Node* Node1,struct Node* Node2)
{
if(Node1==NULL&&Node2==NULL)
return;
Node1->next=Node2;
connectTwoNode(Node1->left,Node1->right);
connectTwoNode(Node1->right,Node2->left);
connectTwoNode(Node2->left,Node2->right);
}
struct Node* connect(struct Node* root) {
if(root==NULL)
return root;
else{
connectTwoNode(root->left,root->right);
return root;
}
}