[二叉树的分层遍历] 倒序的树

比如下面一棵树

    A

  B       C

D       E  F

按照DEFBCA的顺序输出,即倒序分层并按照顺序输出。

答,其实比较简单。我想到的办法是加一个栈,记录每一层的内容,最后输出。可能比较笨,如果有更好的办法,请告诉我。

#include <iostream>
#include <stack>

struct TreeNode
{
    char data;
    TreeNode* leftChd;
    TreeNode* rightChd;
};

std::stack<TreeNode*> nodeStack;

void printTree(TreeNode* node)
{
    nodeStack.push(node);
    //std::cout << node->data << std::endl;
    if(node->rightChd != NULL)
    {
        printTree(node->rightChd);
    }
    if(node->leftChd != NULL)
    {
        printTree(node->leftChd);
    }
}

void printStack(std::stack<TreeNode*> test)
{
    while(test.size() != 0)
    {
        std::cout << test.top()->data << std::endl;
        test.pop();
    }
}

int main(int argc, const char * argv[])
{
    TreeNode *a = new TreeNode;
    a->TreeNode::data = ‘A‘;
    TreeNode *b = new TreeNode;
    b->TreeNode::data = ‘B‘;
    TreeNode *c = new TreeNode;
    c->TreeNode::data = ‘C‘;
    TreeNode *d = new TreeNode;
    d->TreeNode::data = ‘D‘;
    TreeNode *e = new TreeNode;
    e->TreeNode::data = ‘E‘;
    TreeNode *f = new TreeNode;
    f->TreeNode::data = ‘F‘;
    a->leftChd = b;
    a->rightChd = c;
    b->leftChd = d;
    c->leftChd = e;
    c->rightChd =f;
    std::cout << "Hello, MAC!\n";
    printTree(a);
    printStack(nodeStack);
    return 0;
}

我写的不是很好,希望跟各位多多交流。

时间: 2024-08-03 22:20:52

[二叉树的分层遍历] 倒序的树的相关文章

从上往下打印二叉树(分层遍历)

从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 从上到下打印二叉树的规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾.接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直到队列中所有的节点都被打印出来为止. struct TreeNode { int val; TreeNode* left; TreeNode* right; }; void LevelOrder(BinaryTreeNode* root) { if (roo

中序线索二叉树创建及其遍历

通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数.准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个.如下图所示. 因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点.这种指针称为线索. 记ptr指向二叉链表中的一个结点,以下是建立线索的规则: (1)如果ptr->lchild为空,则存放指向中序遍历序列中该结点的前驱结点.这个结点称为ptr的中序前驱: (2)如果ptr->rchild为空,则存放指向中序遍历

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

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

按层逆遍历一棵树,使用满二叉树存储

机试题:用C语言编写控制台程序.使用二叉树按层逆遍历输出树的每一个元素.(即从最底层 往 上输出 直到根节点)要求: 1,自定义数据结构.使用满二叉树存储输入数据.2,input: 0,1,2,3,4,5,6,7   output:7,3,4,5,6,1,2 ,0 分析:假如树的节点数目为num,则树高为:log(num)/log(2)+1,换底公司,log得到以2为底的log函数,其次int类型会自动截断,只保留整数 其次,假定根节点为第1层,则第i层的节点编号为:pow(2,i-1)~pow

分层遍历二叉树算法

分层遍历二叉树的集中情况 从上而下的打印 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()

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

树——二叉树的层次遍历

1,二叉树的遍历: 1,二叉树的遍历(Traversing Binary Tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次: 1,层次就是访问的次序,层次遍历是先访问第一层.再第二层等: 2,考虑的问题: 1,通用树结构的层次遍历算法是否可以用在二叉树结构上?如果可以,代码需要做怎样的改动? 1,可以的,二叉树是一种特别的树: 2,通用树使用的算法可以移植到二叉树使用的场合: 3,设计思路(游标): 1,提供一组遍历相关的函数,按层次访问

637. Average of Levels in Binary Tree(一棵树每层节点的平均数)(二叉树的层序遍历)

Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array. Example 1: Input: 3 / 9 20 / 15 7 Output: [3, 14.5, 11] Explanation: The average value of nodes on level 0 is 3, on level 1 is 14.5, and on le

3143 二叉树的序遍历——http://codevs.cn/problem/3143/

第一部分:题目 题目描述 Description 求一棵二叉树的前序遍历,中序遍历和后序遍历 输入描述 Input Description 第一行一个整数n,表示这棵树的节点个数. 接下来n行每行2个整数L和R.第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号. 输出描述 Output Description 输出一共三行,分别为前序遍历,中序遍历和后序遍历.编号之间用空格隔开. 样例输入 Sample Input 5 2 3 4 5 0 0 0 0 0 0 样例输出 Sam