二叉数组的创建以及后续遍历

//二叉数组的创建

#include<stdio.h>

#include<stdlib.h>

#define MaxSize 100

typedef struct node

{

char data;

struct node *lchild,*rchild;

}BTNode;              //二叉数组的基本结点

//创建二叉数组传入一个头结点传入一个字符数组

void CreateBTree(BTNode* &bt,char *str)

{

BTNode *st[MaxSize],*p=NULL;

int top = -1,k,j=0;

char ch;

bt = NULL;        //赋值为空

ch = str[j];

while(ch!=‘\0‘)

{

switch (ch)

{

case ‘(‘:

top++;                              //进栈

st[top] = p;

k=1;

break;

case‘)‘:

top--;

break;

case‘,‘:

k = 2;

break;

default:

p=(BTNode*)malloc(sizeof(BTNode));           //每一次对值进行动态分配

p->data = ch;

p->lchild = p->rchild = NULL;
//各项数据初始化

if(bt == NULL)

bt = p;                                  //对二叉数组的头结点进行赋值

else

{

switch(k)

{

case 1:

st[top]->lchild = p;

break;

case 2:

st[top]->rchild = p;

break;

}

}

}                                                //end of switch

j++;

ch = str[j];

}                                                    //end of while

}

//二叉数组的输出

void DisBTree(BTNode *bt)

{

BTNode *p = new BTNode;

p = bt;

if(p)

{

DisBTree(bt->lchild);

DisBTree(bt->rchild);

printf("%c    ""\n",bt->data);

}

}

//二叉数组的测试以及后遍历

int main()

{

BTNode *a;

char b[] = "a(b(c,d),e(f,g))";

a = NULL;

CreateBTree(a,b);

DisBTree(a);

system("pause");

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 17:31:52

二叉数组的创建以及后续遍历的相关文章

二叉数组的创建删除插入查找

#include<stdio.h> #include<stdlib.h> typedef struct TreeNode *BinTree; //定义一个对象指针 typedef BinTree Position; //定义一个对象指针名 struct TreeNode{ int Data; BinTree Left; BinTree Right; }; //二叉搜索数的查找Find Position Find(int x,BinTree BST) { if(!BST) //判断B

JS—二维数组的创建

//二维数组的创建 //方法一: var myarr = new Array(); //先声明一维 for ( var i = 0; i < 2; i++) { //一维长度为2 myarr[i] = new Array(); //再声明二维 for ( var j = 0; j < 3; j++) { //二维长度为3 myarr[i][j] = i + j; // 赋值,每个数组元素的值为i+j } } //方法二: var myarr1 = [ [ 0, 1, 2 ], [ 1, 2,

二叉数组的基本操作

//二叉数组的输出 void DisBTree(BTNode* bt) { if(bt) { DisBTree(bt->lchild); DisBTree(bt->rchild); printf("%c ""\n",bt->data); } } //二叉数组的高度 int BTHeight(BTNode *bt) { int lchilddep,rchilddep; if(bt == NULL) return 0; //递归终止条件 else {

(算法)是否为二叉查找数的后序遍历数组

题目: 给定一数组,判断它是否为二叉查找树的后序遍历数组 思路: 想想,二叉查找数树的特点,任意根结点大于左子树的所有值,而小于右子树的所有值: 再想想,后序遍历的特点,先遍历左子树,再遍历右子树,最后是根结点: 因此很容易找到根结点,然后遍历数组找出左子树(从左往右比根结点小的),剩下右边的就是右子树,然后判断右子树是否都大于根结点: 如果是,则递归遍历左子树,遍历右子树,如果都满足了,则是某个二叉树的后序遍历数组: 如果不是,则不是. 代码: #include<iostream> usin

二叉线索树-创建中序二叉线索树、查找前驱、查找后继、按照前驱或后继遍历

#include <iostream> #include <stack> using namespace std; struct BiThrNode { int data; BiThrNode *left; BiThrNode *right; bool ltag;//0表示left指向左子,1表示left指向直接前驱 bool rtag; //BiThrNode(int val,BiThrNode *l,BiThrNode *r,bool lt,bool rt):data(val)

7、一维数组和二维数组耳朵创建,输出,Arrays.fill()替换

package com.xxx.xxx; import java.util.Arrays; public class demo8 { /** * 1.初始化一维数组 使用一维数组 * 2.初始化二维数组 使用二维数组 * 3.填充替换数组元素 * @param args */ public static void main(String[] args) { //1.第一种初始化方式 int arr[] = new int[]{1,2,3,4,5,6}; //一维数组 //1.1.第二种初始化方式

【数据结构】5.2 二叉搜索树的创建查找以及插入操作

TAG 此代码遇到一个bug,在Insert函数中,注释部分,思考一下为什么用这个方法来添加会失效 #include<iostream> using namespace std; struct BTNode { int data; BTNode *lchild,*rchild; }; void selectsort(int a[], int n) { for (int i = 1; i < n; i++) { for (int j = i + 1; j < n; j++) { if

二叉搜索树的创建

class Btreenode: #创建树 def __init__(self,data): self.data=data self.lchild=None self.rchild=None class BTS: def __init__(self,li): self.root=None for i in li: self.insert(i) def insert(self,key): #书中插入一个值 if not self.root: self.root=Btreenode(key) #没有

python二维数组的创建

话不多说,代码伺候 m = [[0]*5]*3 #创建一个3行5列的二维数组 m[1][2]=1 print(m) 输出结果为: 分析: m = [[0]*5]*3只是指向三个空列表的引用. 创建一个二维数组的正确方法是: m = [[0]*5 for i in range(3)]    #创建一个3行5列的二维数组 原文地址:https://www.cnblogs.com/xiaohaodeboke/p/11962090.html