打印二叉树的某一层

原创 2015年11月18日 16:41:29

题目描述

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《程序员面试金典》--输出二叉树中某一层的所有元素

题目描述: struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; Tre...
  • zdplife
  • zdplife
  • 2015年10月23日 16:23
  • 1037

阿里面试题之求完全二叉树的最后一层的最后一个节点

完全二叉树的最后一层的最后一个节点

每一层一个列表广度遍历二叉树

之前有个广度遍历二叉树类似的思想,将每一层放到一个集合去遍历。private ArrayList Print(TreeNode pRoot) { // pRoot为空,返回为空...

设计一个算法,求非空二叉树b的宽度(即具有节点最多的那一层的节点个数)

思想:假设二叉树采用二叉链存储结构,采用层次遍历的方法求出所有节点的层次,并将所有节点和对应的层次放在一个队列中。然后通过扫描队列求出各层的节点总数,最大的层节点总数即为二叉树的宽度。对应的算法如下:...

统计一个二叉树的每一层 节点个数

#include #include#define MAX 100 typedef struct TNode { int data; TNode *left, *right; }TNod...

给定一个二叉树和任意一个节点,求该该节点的下一层的第一个节点

给定一个二叉树和任意一个节点,求该该节点的下一层的第一个节点,该二叉树为孩子表示法...

从上到下打印二叉树结点

  • 2014年06月08日 13:16
  • 636B
  • 下载

分层打印二叉树--Java实现

前言啊:工作几年了,但以前大学学的算法都快忘完了。趁着准备换工作的时间准备把算法给捡起来,因为毕业后用的编程语言是Java所以准备都用Java语言来实现。 要求:有如下的二叉树,请写出一算法实现分层...

JAVA二叉树横向打印

  • 2009年11月06日 11:23
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:打印二叉树的某一层
举报原因:
原因补充:

(最多只允许输入30个字)