zoukankan      html  css  js  c++  java
  • 面试题 04.03. 特定深度节点链表

    https://leetcode-cn.com/problems/list-of-depth-lcci/

    这道题比较简单,就是遍历树,广度优先,一层层的遍历,唯一需要注意的是,如何定义到了第几层,做法就是在每一层结束,下一层开始,加入一个标识符。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<ListNode*> listOfDepth(TreeNode* tree) {
            vector<ListNode*> alist;
            if (tree != NULL)
            {
                queue<TreeNode*> nodequeue;
                ListNode* plnode = NULL;
                nodequeue.push(tree);
                nodequeue.push(NULL);
                TreeNode * tnode = NULL;
                int tlevel = 0;
                while (!nodequeue.empty())
                {
                    tnode = nodequeue.front();
                    nodequeue.pop();
                    if (tnode == NULL)
                    {
                        tlevel++;
                        if (nodequeue.empty())
                        {
                            break;
                        }
                        plnode = NULL;
                        nodequeue.push(NULL);
                        continue;
                    }
                    else
                    {
                        if (plnode == NULL)
                        {
                            plnode = new ListNode(0);
                            plnode->val = tnode->val;
                            alist.emplace_back(plnode);
                        }
                        else
                        {
                            plnode->next = new ListNode(0);
                            plnode = plnode->next;
                            plnode->val = tnode->val;
                        }
                    }
                    if (tnode->left != NULL)
                    {
                        nodequeue.push(tnode->left);
                    }
                    if (tnode->right != NULL)
                    {
                        nodequeue.push(tnode->right);
                    }
                }
            }
            return alist;
        }
    };
    
  • 相关阅读:
    第九章 引用
    第八章 指针
    第六章 面向对象
    第五章 if语句与运算符
    第四章 C++数据类型
    第三章 初步了解函数
    第二章 做一个简短的C++程序
    第一章 初始C++
    vs2012 快捷键+方法
    vue如何修改生效日期范围,以及转化成yyyy-mm-dd的格式
  • 原文地址:https://www.cnblogs.com/studywithallofyou/p/13631969.html
Copyright © 2011-2022 走看看