写代码:定义顺序存储的二叉树(数组实现,树的结点从数组下标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){
//TODO
return -1;//节点不合法
}
return i/2;
}
//查找i的左孩子
int findLeftChild(int i)
{
int left=i*2;
if(left>=MAX_SIZE){
//TODO
return -1;//节点不合法
}
return left;
}
//查找右孩子
int findRightChild(int i)
{
int right=2*i+1;
if(right>=MAX_SIZE){
//TODO
return -1;
}
return right;
}
//先序遍历
void preOrderTraversal(int i)
{
if(i>=MAX_SIZE ||i>1){
//TODO
return;
}
printf("%d",tree[i]);//访问根节点
preOrderTraversal(findLeftChild(i)) ;//递归遍历左子树
preOrderTraversal(findRightChild(i));//递归遍历右子树
}
//中序遍历
void inOrderTraversal(int i)
{
if(i>=MAX_SIZE ||i<1){
//TODO
return;
}
inOrderTraversal(findLeftChild(i));//递归遍历左子树
printf("%d",tree[i]);//访问根节点
inOrderTraversal(findRightChild(i));//递归访问右子树
}
//后序遍历
void postOrderTraversal(int i)
{
if(i>=MAX_SIZE ||i<1){
//TODO
return;
}
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){
//TODO
return -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]) {
//TODO
return right;
}
return -1;
}
void preOrder(Bitree t,int i)
{
if(i==-1){
//TODO
return;
}
printf("%d",t[i]);
preOrder(t,findLeftChild(t,i));
preOrder(t,findRightChild(t,i));
}
void inOrder(Bitree t,int i)
{
if(i==-1){
//TODO
return;
}
inOrder(t,findLeftChild(t,i));
printf("%d",t[i]);
inOrder(t,findRightChild(t,i));
}
void postOrder(Bitree t,int i)
{
if(i==-1){
//TODO
return;
}
postOrder(t,findLeftChild(t,i));
postOrder(t,findRightChild(t,i));
printf("%d",t[i]);
}