懵逼了看到这个题目。感觉用什么去做呢,先序后序中序遍历好像都不行。利用栈呢,又不知道怎么利用栈进行层次遍历。我个人觉得这道题的关键就是建立指针,然后判断其同层次右节点是否存在,还有一个就是层次遍历。不过可能是我想复杂了,因为写了这么多道题,还没遇到层次遍历的。挠头jpg
让我来看看层次遍历是怎么个回事
首先是一个循环,判断是队列是否为空,然后在循环里面用size记录队列的尺寸,然后for循环,如果遍历这么多尺寸的队列,遍历的时候按照规则:先去除队头元素赋给节点指针,然后弹出。然后当没弹完的是偶,依次将node类型的指针的下一个指向的节点,(其实就是指向下一个节点的指针)将其赋值给他,然后拓展下一层节点,就是说如果下一层节点不为空,将其塞进队列,左右节点各做一次判断就行了
然后跳出整个循环,返回根节点
Over
讲一讲具体的代码吧,大概就是:
Class Solution{
Public:
node *connect(node* root){
If(root==nullptr){
Return root;
}
Queue<Node*> Q;
Q.push(root);
While(!Q.empty()){
Int size=Q.size();
For(int i=0;i<size;i++){
Node* node=q.front();
q.pop();
If(i<size-1){
Node->next=q.front();
}