码迷,mamicode.com
首页 > 其他好文 > 详细

输出单层结点

时间:2016-06-13 21:55:05      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

题目描述

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。

给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class TreeLevel {
public:           
    ListNode* getTreeLevel(TreeNode* root, int dep) {
        // write code here
        if (root==0||dep<=0)
            return 0;        
        ListNode* nodehead = new ListNode(-1);
        ListNode* node = nodehead;
        queue<TreeNode*> q;
        q.push(root);
//层次遍历的基础上,添加判断是否属于第dep层。
        int line1=1,line2=0,num=1;
        while(!q.empty()){
            if(dep == num){
                for(int i=0;i<line1;i++){
                ListNode* tmp = new ListNode(q.front()->val);
                node->next = tmp;
                node = tmp;
                q.pop();
                }
                return nodehead->next;
            }
            TreeNode * root1 = q.front();
            q.pop();
            if(root1->left != nullptr){
                q.push(root1->left);
                line2++;
            }
              if(root1->right != nullptr){
                q.push(root1->right);
                line2++;
            }
            if(--line1==0){
                line1=line2;
                line2=0;
                num++;
            }           
        }        
        return nodehead->next;
    }    
};

 line1表示出队那一层留下的元素个数,line2表示下一层入队元素的个数。num表示遍历的层数。

 

输出单层结点

标签:

原文地址:http://www.cnblogs.com/huweidong91/p/5581933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!