打印二叉树的某一层

来源:互联网 发布:java软件eclipse中文版 编辑:程序博客网 时间:2024/05/29 09:14

题目描述

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

Code

#include <bits/stdc++.h>using namespace std;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) {        ListNode* head=(ListNode* )malloc(sizeof(ListNode));        ListNode* l=head;        l=head;        queue<TreeNode* >Q;        if(root)            Q.push(root);        int num = 1,dept=1,tag=0;        while(!Q.empty()&&dept<=dep) {            int num1=0;            for(int i=0; i<num; i++) {                TreeNode* tmp = Q.front();                Q.pop();                if(dept==dep) {                    if(!tag) {                        head->val=tmp->val;                        l=head;                        tag=1;                    } else {                        ListNode* r=(ListNode* )malloc(sizeof(ListNode));                        r->val=tmp->val;                        l->next=r;                        l=r;                    }                }                if(tmp->left) {                    Q.push(tmp->left);                    num1++;                }                if(tmp->right) {                    Q.push(tmp->right);                    num1++;                }            }            dept++;            num=num1;        }        l->next=NULL;        return head;    }} s;int main() {    TreeNode f1=TreeNode(1);    TreeNode f2=TreeNode(2);    TreeNode f3=TreeNode(3);    TreeNode f4=TreeNode(4);    f1.left=&f2;    f2.left=&f4;    f1.right=&f3;    TreeNode* root = &f1;    ListNode* ans = s.getTreeLevel(root,1);    while(ans) {        printf("%d -> ",ans->val);        ans = ans->next;    }    puts("");    return 0;}
0 0
原创粉丝点击