一、问题描述
今天在北航考研群看到老哥发了一道二叉树的题,感觉挺有意思的,就做了做,题目如下:
二、思路分析
思路需要结合代码来看
三、代码实现
typedef struct Node{
int val;
struct Node *left;
struct Node *right;
struct Node *next;
}*trees;
void linkTree(trees tree){
int top = 0,rear = 0; //初始化队列
int maxSize = 50; //初始化队列容量
trees data[maxSize]; //初始化队列
tree->next = NULL; //头结点next指向NULL
top = (top+1)%maxSize; //
data[top] = tree; //头结点入队
while(top != rear){
rear = (rear+1) % maxSize;
trees node = data[rear]; //出队
if(node->left != NULL){ //若当前节点左孩子不为NULL
top = (top+1)%maxSize;
data[top] = node->left; //入队
node->left->next = node->right; //当前节点左孩子指向当前节点右孩子(右孩子可以为NULL)
}
if(node->right != NULL){ //若当前节点右孩子不为NULL
top = (top+1)%maxSize;
data[top] = node->right; //入队
if(node->next != NULL){ //若当前节点next不为NULL
node->right->next = node->next->left; //当前节点右孩子指向当前节点兄弟节点左孩子
}else{
node->right->next = NULL;
}
}
}
}