当前位置: 首页> 文旅> 文化 > 二叉树的顺序存储和基本操作实现

二叉树的顺序存储和基本操作实现

时间:2025/7/9 21:54:50来源:https://blog.csdn.net/snowy_and_sunny/article/details/142305486 浏览次数:0次

写代码:定义顺序存储的二叉树(数组实现,树的结点从数组下标1开始存储) 
基于上述定义,写一个函数 int findFather ( i ) ,返回结点 i 的父节点编号 
基于上述定义,写一个函数 int leftChild ( i ) ,返回结点 i 的左孩子编号 
基于上述定义,写一个函数 int rightChild ( i ) ,返回结点 i 的右孩子编号 
利用上述三个函数,实现先/中/后序遍历 
写代码:定义顺序存储的二叉树(数组实现,树的结点从数组下标0开始存储) 
基于上述定义,写一个函数 int findFather ( i ) ,返回结点 i 的父节点编号 
基于上述定义,写一个函数 int leftChild ( i ) ,返回结点 i 的左孩子编号 
基于上述定义,写一个函数 int rightChild ( i ) ,返回结点 i 的右孩子编号 
利用上述三个函数,实现先/中/后序遍历

 1.定义顺序存储的二叉树(数组实现,树的结点从数组下标1开始存储)

 
基于上述定义,写一个函数 int findFather ( i ) ,返回结点 i 的父节点编号 
基于上述定义,写一个函数 int leftChild ( i ) ,返回结点 i 的左孩子编号 
基于上述定义,写一个函数 int rightChild ( i ) ,返回结点 i 的右孩子编号 
利用上述三个函数,实现先/中/后序遍历 

#include <stdio.h>#define MAX_SIZE 100
int tree[MAX_SIZE];
//查找父节点
int findFather(int i)
{if(i<=1 ||i>=MAX_SIZE){//TODOreturn -1;//节点不合法 }return i/2; 
} 
//查找i的左孩子
int findLeftChild(int i)
{int left=i*2;if(left>=MAX_SIZE){//TODOreturn -1;//节点不合法 }return left; 
} 
//查找右孩子
int findRightChild(int i)
{int right=2*i+1;if(right>=MAX_SIZE){//TODOreturn -1;}return right;
} 
//先序遍历
void preOrderTraversal(int i)
{if(i>=MAX_SIZE ||i>1){//TODOreturn;}printf("%d",tree[i]);//访问根节点preOrderTraversal(findLeftChild(i)) ;//递归遍历左子树preOrderTraversal(findRightChild(i));//递归遍历右子树 
} 
//中序遍历
void inOrderTraversal(int i)
{if(i>=MAX_SIZE ||i<1){//TODOreturn;}inOrderTraversal(findLeftChild(i));//递归遍历左子树printf("%d",tree[i]);//访问根节点inOrderTraversal(findRightChild(i));//递归访问右子树 
} 
//后序遍历
void postOrderTraversal(int i)
{if(i>=MAX_SIZE ||i<1){//TODOreturn;}postOrderTraversal(findLeftChild(i));//递归遍历左子树postOrderTraversal(findRightChild(i));//递归遍历右子树printf("%d",tree[i]);//访问根节点 
}

2.定义顺序存储的二叉树(数组实现,树的结点从数组下标0开始存储) 

基于上述定义,写一个函数 int findFather ( i ) ,返回结点 i 的父节点编号 
基于上述定义,写一个函数 int leftChild ( i ) ,返回结点 i 的左孩子编号 
基于上述定义,写一个函数 int rightChild ( i ) ,返回结点 i 的右孩子编号 
利用上述三个函数,实现先/中/后序遍历 

#include <stdio.h>#define MAX_SIZE 100
typedef int ElemType;
typedef ElemType Bitree[MAX_SIZE];int findFather (int i)
{if(i==0){//TODOreturn -1;}return (i-1)/2;
} 
int findLeftChild(Bitree t,int i)
{int left=2*i+1;if(left<MAX_SIZE &&t[left] !=0){return left;}return -i;
}
int findRightChild(Bitree t,int i)
{int right =2*i+2;if(right<MAX_SIZE && t[right]) {//TODOreturn right;}return -1;
}
void preOrder(Bitree t,int i)
{if(i==-1){//TODOreturn;}printf("%d",t[i]);preOrder(t,findLeftChild(t,i));preOrder(t,findRightChild(t,i));
}
void inOrder(Bitree t,int i)
{if(i==-1){//TODOreturn;}inOrder(t,findLeftChild(t,i));printf("%d",t[i]);inOrder(t,findRightChild(t,i));
}void postOrder(Bitree t,int i)
{if(i==-1){//TODOreturn;}postOrder(t,findLeftChild(t,i));postOrder(t,findRightChild(t,i));printf("%d",t[i]);
}

关键字:二叉树的顺序存储和基本操作实现

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: