zoukankan      html  css  js  c++  java
  • 二叉树与数组

    1.将二叉树转换为顺序存储结构,按完全二叉树形式存储,无元素的结点当做虚结点。按层次顺序遍历二叉树,设根结点编号为0,设置一队列,将结点及其序号入队。出队时将结点及其编号写入顺序存储结构。

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct BTreeNode
    {
    	int data;
    	struct BTreeNode *lchild,*rchild;
    }BTree;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    typedef struct{
    	BTree *node;
    	int num;
    }tnode;
    void BTreeToSeqt(BTree *t,char s[])
    {
    	tnode q[100];
    	tnode tq;
    	int front=0,rear=0;
    	BTree *p;
    	if(t==NULL)exit(0);
    	for(int i=0;i<100;i++)
    	{
    		s[i]='#';//虚结点
    		tq.node=t;tq.num=1;q[++rear]=tq;//根结点入队
    		while(front<rear)//存入顺序存储结构
    		{
    			tq=q[++front];
    			p=tq.node;
    			i=tq.num;
    			s[i]=p->data;
    			if(p->lchild)//左子女入队
    			{
    				tq.node=p->lchild;
    				tq.num=2*i;
    				q[++rear]=tq;
    			}
    			if(p->rchild)//右子女入队
    			{
    				tq.node=p->rchild;
    				tq.num=2*i+1;
    				q[++rear]=tq;
    			}
    		}
    	}
    }
    

     2.顺序结构建立二叉树,有些结点是虚结点

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct BTreeNode
    {
    	int data;
    	struct BTreeNode *lchild,*rchild;
    }BTree;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    typedef struct{
    	BTree *node;
    	int num;
    }tnode;
    void create(BTree *t,char s[],int length)//length为二叉树数组长度
    {
    	tnode q[100];
    	tnode tq;
    	int front=0,rear=0;
    	t=(BTree*)malloc(sizeof(BTreeNode));
    	t->data=s[0];//根结点存在s[0]
    	tq.node=t;tq.num=1;
    	q[0]=tq;//入队
    	while(front!=rear)
    	{
    		front++;
    		tq=q[front];
    		BTree *p=tq.node;
    		int i=tq.num;//出队,取出结点及编号
    		if(2*i>length||s[2*i]=='#')//左子树为空
    		{
    			p->lchild=NULL;
    		}
    		else
    		{
    			p->lchild=(BTree*)malloc(sizeof(BTreeNode));
    			p->lchild->data=s[2*i];
    			tq.node=p->lchild;tq.num=2*i;
    			rear++;
    			q[rear]=tq;//左子女结点及其编号入队
    		}
    		if(2*i+1>length||s[2*i+1]=='#')//右子树为空
    		{
    			p->rchild=NULL;
    		}
    		else
    		{
    			p->rchild=(BTree*)malloc(sizeof(BTreeNode));
    			p->rchild->data=s[2*i+1];
    			tq.node=p->rchild;tq.num=2*i+1;
    			rear++;
    			q[rear]=tq;//右子女结点及其编号入队
    		}
    	}
    }
    
  • 相关阅读:
    javaWeb css图文混排
    Junit 测试 @Test 红名问题
    java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
    【转】正则表达式的分组
    正则表达式基础
    IIS连接数修改
    【整理】fiddler不能监听 localhost和 127.0.0.1的问题
    【转】WKT、SRID、EPSG概念
    WPF中查找控件的扩展类
    【转】告别码农,成为真正的程序员
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2643140.html
Copyright © 2011-2022 走看看