已知先序和中序序列分别存储在A、B数组中,建立二叉树的二叉链表

it2022-05-05  150

通过先序加中序很显然是可以唯一建立一棵二叉树的,过程呢就是在先序数组中定位根节点,再到中序数组中找到这个元素,

那么在这个元素之前的就是左子树节点,在这个元素右边的就是右子树节点,实际上就是地递归的对区间进行划分

/*通过先序加中序很显然是可以唯一建立一棵二叉树的,过程呢就是在先序数组中定位根节点,再到中序数组中找到这个元素, 那么在这个元素之前的就是左子树节点,在这个元素右边的就是右子树节点,实际上就是地递归的对区间进行划分 */ BiTree PreInCreate(int A[], int B[], int la, int ra, int lb, int rb){ //默认最开始传入的la = lb = 0; ra = rb = n-1; root = (BiTNode*)malloc(sizeof(BiTNode));//申请一个节点 p->data = A[la]; for(int i = lb;B[i]!=p->data;i++); int llen = i - lb;//左子树长度 int rlen = rb - i; if(llen){//递归建立左子树 root>lchild = PreInCreate(A,B,la+1,la+llen,lb,lb+llen-1); } else{ root->lchild = NULL; } if(rlrn){ root->rchild = PreInCreate(A,B,ra-rlen+1,ra,rb-rlrn+1,rb); } else{ root->rchild = NULL; } return root; }

 


最新回复(0)