首页 > 其他 > 详细

输出单层结点

时间:2016-06-13 21:54:55      阅读:133      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!