分层遍历二叉树算法

分层遍历二叉树的集中情况

  1. 从上而下的打印
vector<vector<int>> printLevel(TreeNode *root)
{
    
    vector<vector<int>>  ret;
    if(root == NULL) return ret;
    
    queue<TreeNode *> q;
    int size;
    q.push_back(root);
    while(!q.empty())
    {
        size = q.size();  //当前层次的个数
        
        vecotr<int> tmp;
        while(size --)  //纪录当前层次
        {
            TreeNode *t = q.top();
            q.pop();
            tmp.push_back(t->val);
            if(t->left)   q.push_back(t->left);
            if(t->right)  q.push_back(t->right);
        }
        ret.push_back(tmp);
    }
    return ret;
}
2.
    也可以使用两个vector 交换赋值;

2.   打印某一层的的全部节点

void printLevel(TreeNode *root, int level)
{
    if(root == NULL || level < 0) return;
    
    if(level ==0) {
       print root->val;
       returrn;
    }
    
    printLevel(root->left, level--);  //这两个交换可以改变打印顺序
    printlevel(root->right,level--);
}

3.  从下而上的打印每一层节点

//根据算法1, 改成递归

4. 从下而上,自右而左的打印每一层节点

在3递归的基础上,把没层的节点reverse.
时间: 2024-12-11 22:05:44

分层遍历二叉树算法的相关文章

编程之美-分层遍历二叉树

问题:给定一个二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号.那么分层遍历如图的二叉树,正确的输出应该为: <span style="font-size:14px;">1 2 3 4 5 6 7 8</span> 书中还给出了问题2:打印二叉树中的某层次的节点(从左到右),其中根结点为第0层,成功返回true,失败返回false 分析与解法 关于二叉树的问题,由于其本身固有的

史上最简明易懂非递归遍历二叉树算法

巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 遍历二叉树的递归函数是体现了算法之美的高妙算法,思路清晰,代码简洁,读之赏心悦目.代码例如以下: 程序代码: void PreOrderTraverse_R(BiTree BT)//採用递归方式先序遍历二叉树BT { if(BT != NULL) { printf("%c", BT->data);//输出该结点(根结点) PreOrderTraverse_R(BT->lchi

3.10 分层遍历二叉树

题目1:写一个函数,打印二叉树中某层次的节点(从左到右),其中根节点为第0层. 思路:利用递归算法,思想是:要求访问二叉树中第k层的节点,那么其实就是要访问"以该二叉树根节点的左右子节点为根节点的两颗子树"中层次为k-1的节点 代码: struct pNode { int data; pNode *lChild; pNode *rChild; }; int printNodeAtLevel(pNode *root, int level) { if(root == NULL || lev

【编程之美】3.10分层遍历二叉树

主要难度在于何时插入换行 学习到的:①vector 可以像数组一样用 不一定要用迭代器 代码及注释如下: #include<iostream> #include<queue> using namespace std; typedef struct BiTree { BiTree * pLeft, * pRight; int data; }BiTree; void createBiTree(BiTree * &T) { int d; cout << "p

分层遍历二叉树

void printTopDown(BinaryTree* root) { deque<BinaryTree> dequeB; deque.push_back(root); while(!deque.empty()) { BinaryTree*p=deque.front(); cout<<p->value<<endl; if(p->left) dequeB.push_back(p->left); if(p->right) dequeB.push_

网易:层次遍历二叉树

题目描述 分层遍历二叉树 用java实现树结构,分层遍历二叉树.给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层单独输出一行),每一层要求访问的顺序为从左到右,再按照相同规则从下至上遍历一遍,树节点定义如下 class Node { int data; Node left; Node right; } 输入描述 图: __1__ / __2__ 3__ / \ 4 __5__ 6 7 8 上面的输入为:1, 2, 3, 4, 5, 0, 6, 0, 0, 7, 8注:

重拾算法(1)——优雅地非递归遍历二叉树及其它

重拾算法(1)——优雅地非递归遍历二叉树及其它 本文中非递归遍历二叉树的思想和代码都来自这里(http://jianshu.io/p/49c8cfd07410#).我认为其思想和代码都足够优雅动人了,于是稍作整理,得到如下的程序. 前中后序遍历二叉树 1 public class BinaryTreeNode<T> 2 { 3 public T Value { get;set; } 4 public BinaryTreeNode<T> Parent { get;set; } 5 p

数据结构算法C语言实现(二十)--- 6.3.1遍历二叉树

一.简述 二叉树的遍历主要是先序.中序.后序及对应的递归和非递归算法,共3x2=6种,其中后序非递归在实现上稍复杂一些.二叉树的遍历是理解和学习递归及体会栈的工作原理的绝佳工具! 此外,非递归所用的栈及相关操作是第三章实现的,但数据类型做了更改. 二.头文件 1 //3_1.h 2 /** 3 author:zhaoyu 4 email:[email protected] 5 date:2016-6-7 6 note:realize my textbook <<数据结构(C语言版)>&g

二叉树分层遍历

首先定义二叉树的存储结构: 1 struct TreeNode { 2 int val; 3 TreeNode *left; 4 TreeNode *right; 5 6 TreeNode(int v, TreeNode* l = NULL, TreeNode *r = NULL) 7 :val(v), left(l), right(r) {} 8 }; 1.递归的方法(<编程之美>3.10) 二叉树本身就带有递归属性,通常我们可以用递归方法解决.假设要访问第k层节点,那么其实可以转皇城分别访