C语言 二叉树顺序存储结构的先序遍历算法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define __MAX_LENGTH__ 20

typedef struct SqStack{//调用栈
    int data[__MAX_LENGTH__];
    int top;
}SqStack;

typedef struct SqBiTree{//顺序存储二叉树
    elemType data[__MAX_LENGTH__];
    int len;
}SqBiTree;

//按先序遍历一维数组作为存储结构的二叉树
int traTree(SqBiTree *t){

    SqStack *stack = calloc(sizeof(SqStack),1);
    stack->top = 0;//将栈制空;
    int root;
    root = 0;//指向根节点;
    while((stack->top)>-1){//当栈不为空时,进入循环
        while(root<__MAX_LENGTH__&&t->data[root]>=‘a‘){//

            printf("%c,",t->data[root]);//访问节点
            stack->data[stack->top] = root;//节点入栈
            stack->top ++;
            root = (root+1) * 2-1;//检查下一个左子树;
        }
        if(stack->top >-1){//栈非空访问,遍历右子树;
            stack->top --;
            root = (stack->data[stack->top]+1)*2;
        }
    }
}

int main(int argc, char *argv[])
{
    SqBiTree *p = calloc(sizeof(SqBiTree),1);
    strcpy(p->data,"abcdefghij");
    traTree(p);
    return 0;
}

时间: 2024-10-25 21:56:14

C语言 二叉树顺序存储结构的先序遍历算法的相关文章

笔试算法题(36):寻找一棵二叉树中最远节点的距离 &amp; 根据二叉树的前序和后序遍历重建二叉树

出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所以计算出以每个节点为根节点的子树的最 远距离,最后取他们的最大值就是整棵树的最远距离: 如果递归层次过多造成系统栈溢出,则可以使用stack堆栈结构存储递归节点,从而使用循环实现 解题: 1 struct Node { 2 int value; 3 Node *left; 4 Node *right

二叉树的建立与先序遍历

// -------------------------// 二叉树的建立与先序遍历// ------------------------ #include <iostream>#include <malloc.h>using namespace std; typedef struct BiTreeNode { char elem; struct BiTreeNode *lchild, *rchild;}BiTreeNode,*BiTree; void CreatBiTree(Bi

栈实现二叉树的先,中,后序遍历

栈实现二叉树先,中,后序遍历 如果是使用递归来实现二叉树的先,中,后序遍历只需要更改三行代码的位置,但若是使用栈来写那便会有趣得多 根结点与其左右子树间的输出优先级 graph TD 1((根结点))---2((左子树)) 1---3((右子树)) 遍历方式 输出优先级 先序 根结点>左子树>右子树 中序 左子树>根结点>右子树 后序 左子树>右子树>根节点 使用栈的规则 栈内元素是指向结点的指针 只有栈顶元素指向的结点内容才会被输出 方便,不用记忆太多结点 结点内容输

maven之Transitive dependencies(默认树的先序遍历算法处理依赖冲突)

maven之Transitive dependencies(默认树的先序遍历算法处理依赖冲突) One of Maven's major contributions is the way it deals and manages not only direct dependencies, but also transitive ones. 你项目中的依赖,不管是直接依赖还是间接/传递依赖,maven都能很好的管理. The concept of transitivity Dependencies

POJ 2255 Tree Recovery &amp;&amp; Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)

链接:poj.org/problem?id=2255 题意: 分别给你一个二叉树的前序遍历序列和中序遍历序列,让你给出这个二叉树的后序遍历序列. 思路: 对于二叉树的三种遍历方式,都可以使用递归来实现,那么也一定可以使用递归来拆解,以达到从遍历序列确定二叉树具体结构的目的.对于前序遍历来说,第一个字母一定是根,并且在序列中根的左子树包含的点一定出现在根的右子树的前面.对于中序遍历序列来说,根前面出现的字母所代表的点一定出现在左子树中,根后面出现的字母所代表的点一定出现在右子树中.在根据前序与中序

已知二叉树的前序和中序遍历,重构该二叉树

这套题来自于牛客网剑指offer的第四题,由于本题涉及到了对树的递归操作,而且在边界上自己计算时犯了小错误,这里记录一下: 题目描述如下: 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 解题思路: 1.由树的先序遍历可以求树的根节点, 2.根据根节点的位置在中序遍历中找到树左右子树的元素, 3.递

二叉树(3)----后序遍历,递归和非递归方式

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.后序遍历 定义: 给定根节点,首先遍历左子树,然后遍历右子树,最后

二叉树(2)----中序遍历,递归和非递归实现

1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.中序遍历 定义:首先访问左子树,然后访问根节点,最后访问右子树

二叉树的前中后序遍历简单的递归

二叉树的遍历 无外乎广度和深度 其中深度又分为前中后序遍历三种情况  这三种遍历若只是递归方法 自然很是简单 但递归代码简单 若嵌套层次太深 会栈溢出 二叉树节点数据结构: struct Binary_node{    int val;    Binary_node *left;    Binary_node *right;    Binary_node(int v = 0, Binary_node *le = nullptr, Binary_node *ri = nullptr) :val(v