zoukankan      html  css  js  c++  java
  • LeetCode 116.填充每个节点的下一个右侧节点指针

    题目描述链接:here

    题目解读:在一棵完美二叉树上,让其每一层的节点(除最右侧节点外)指向其同一层的右侧节点。这里的完美二叉树实际上就是满二叉树。

    解题思路:由于给出的树为满二叉树,那么就可以利用满二叉树的性质来很好地解决此题。由于需要对二叉树进行层次遍历,那么就可以使用队列,对于满二叉树每层节点的个数为pow(2,d-1),d为深度。由此该题的解题思路就产生了。使用队列进行层次遍历,由于每层节点的个数确定,即可以使得每层的节点(除去最右侧节点)指向其右侧节点。

    解题代码:

    class Solution {
    public:
        Node* connect(Node* root) {
            if(!root){
                return root;
            }
            Node *p=root;
            int depth=0;
            while(p){
                p=p->left;
                depth+=1;
            }
            queue<Node*> q;
            q.push(root);
            int d=1;
            int i;
            Node *temp;
            while(!q.empty()){
               i=1;
               while(i<pow(2,d-1)){
                   temp=q.front();
                   if(temp->left){
                       q.push(temp->left);
                   }
                   if(temp->right){
                       q.push(temp->right);
                   }
                   q.pop();
                   temp->next=q.front();
                   i++;
               }
               if(q.front()->left){
                   q.push(q.front()->left);
               }
               if(q.front()->right){
                   q.push(q.front()->right);
               }
               q.pop();
               d++;
            }
            return root;
        }
    };
  • 相关阅读:
    KMP
    1. Android Studio阅读源码
    疑难杂症
    队列
    方法和数组
    基本语法
    MySQL数据库创建
    MySQL安装
    Python--爬虫之(斗图啦网站)图片爬取
    Linux网络编程之基础概念
  • 原文地址:https://www.cnblogs.com/zzw-/p/14231956.html
Copyright © 2011-2022 走看看