叶老师版数据结构二叉树各种函数.doc
数据结构二叉树学习教案

[1]
A
[2]
B
[3]
C
[4]
D
[5]
E
般不用
[6] [7] [8] [9]
F G H I
A
一 、顺序 存储结 构 按 二 叉 树 的 结点“ 自上而 下、从 左至右 ”编号 ,用一 组连续 (liánxù)的 存储 单元存 储。
B
C
D EF G
H
I
问:顺序存储后能否复原成唯一对应(duìyìng)的二叉树形状? 答:若是完全/满二叉树则可以做到唯一复原。
right_child
data
left_child
right_child
第6页/共17页
第七页,共16页。
二 叉 树 结 点 (jié diǎn)数 据 类 型 定 义 : typedef stru ct B iTNod e {
TElemT ype d ata; struct BiTN ode *lef t_chi ld, *righ t_ch ild; } BiTNo de, * BiTr ee;
f
d
b
e
ac
g i
h
j
第14页/共17页
第十五页,共16页。
习题2:若一棵二叉树,左右子树均有三个结点,其左子树的前 (先)序序列与中序序列相同,右子树的中序序列与后序 序列相同,试构造该树。
习题3:一棵非空的二叉树其先序序列和后序序列正好相反,画出 这棵二叉树的形状。
习题4:已知一棵完全二叉树共有892个结点,试求:⑴ 树的高度; ⑵ 叶结点数;⑶ 单支(度为1)结点数;⑷ 最后(zuìhòu)一 个非终端结点的序号。
第9页/共17页
第十页,共16页。
二叉树数据结构复习

8.解:
A 5 3 1 B 1 E 4 2 2 G 3 2 D 3 C
例
A 3
6 4 11 C B 2
0 4 11 初始: 6 0 2 3 0
路径: BA CA
AB AC BC
0 4 11 加入V1: 6 0 2 3 7 0 0 4 6 加入V2: 6 0 2 3 7 0
路径: BA
AB AC BC
二叉树复习题
算法与数据结构
1.给定二叉树的两种遍历序列,分别是: (1)已知一棵二叉树的先序序列和中序序列分别为 ABDGHCEFI和GDHBAECIF,请画出此二叉树。 (2)已知一棵二叉树的中序序列和后序序列分别为 BDCEAFHG和DECBHGFA,请画出此二叉树。
答案
2. 试写出如图所示的二叉树分别按先序、中序、后 序遍历时得到的结点序列。
4.【解答】
(1) 以顶点①为根的深度优先生成树(不唯一): ① ② ③④⑤
5.答:
6.Βιβλιοθήκη 7.解: 循环状态表如下: 循环 集合 K D[1] D[2] D[3] D[4] D[5] D[6] 初始化 {1} 0 20 15 ∞ ∞ ∞ 1 {1,3} 3 0 19 15 ∞ ∞ 25 2 {1,3,2} 2 0 19 15 ∞ 29 25 3 {1,3,2,6} 6 0 19 15 29 29 25 4 {1,3,2,6,4} 4 0 19 15 29 29 25 5 1,3,2,6,4,5} 5 0 19 15 29 29 25 6 同上 同上 从源点1到各点的路径如下所示: 1到2:132 1到3:13 1到4:1364 1到5:1325 1到6:136
答案
3.假设用于通信的电文由字符集 {a,b,c,d,e,f,g,h}中的字母构成,这8个字母 在电文中出现的概率分别为 {0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}. (1)为这8个字母设计哈夫曼编码。 (2)若用这三位二进制数(0…7)对这8个字 母进行等长编码,则哈夫曼编码的平均码 长是等长编码的百分之几?它使电文总长平 均压缩多少?
二叉树叶子节点数计算公式

二叉树叶子节点数计算公式在计算机科学领域,二叉树是一种非常常见的数据结构,它由节点组成,每个节点最多有两个子节点。
其中,叶子节点是指没有子节点的节点,它们位于二叉树的末端。
计算二叉树的叶子节点数是一个常见且重要的问题,本文将介绍如何通过简单的方法来计算二叉树的叶子节点数。
我们需要了解二叉树的结构。
二叉树可以分为左子树和右子树,每个节点都有一个左子节点和一个右子节点(如果存在的话)。
叶子节点是指没有左子节点和右子节点的节点。
因此,计算二叉树的叶子节点数可以通过遍历整个二叉树并统计叶子节点的数量来实现。
一种简单的方法是使用递归。
通过递归地遍历二叉树的每个节点,我们可以轻松地计算出叶子节点的数量。
具体来说,我们可以按照以下步骤来计算叶子节点数:1. 从根节点开始,如果当前节点为空,则返回0。
2. 如果当前节点是叶子节点(即没有左子节点和右子节点),则返回1。
3. 否则,递归地计算左子树和右子树的叶子节点数,并将它们相加。
通过以上步骤,我们可以得到整个二叉树的叶子节点数。
这种方法简单直观,适用于大多数二叉树的情况。
除了递归方法外,我们还可以使用迭代方法来计算二叉树的叶子节点数。
迭代方法通常需要借助数据结构(如栈或队列)来辅助计算。
具体步骤如下:1. 初始化一个栈,并将根节点入栈。
2. 循环遍历栈,直到栈为空。
3. 每次弹出栈顶节点,并检查其是否为叶子节点。
如果是,则将叶子节点计数加一。
4. 如果当前节点有左子节点,则将左子节点入栈;如果有右子节点,则将右子节点入栈。
通过迭代方法,我们也可以得到二叉树的叶子节点数,这种方法在某些情况下可能更有效。
在实际应用中,计算二叉树的叶子节点数是一个常见的问题,它可以帮助我们更好地理解和分析二叉树的结构。
通过掌握递归和迭代两种方法,我们可以灵活地解决这类问题,并深入理解二叉树的特性。
通过本文介绍的方法,我们可以轻松计算二叉树的叶子节点数,这对于深入学习数据结构和算法有着重要的意义。
数据结构 -第12周查找第3讲-二叉排序树.pdf

以二叉树或树作为表的组织形式,称为树表,它是一类动态查找表,不仅适合于数据查找,也适合于表插入和删除操作。
常见的树表:二叉排序树平衡二叉树B-树B+树9.3.1 二叉排序树二叉排序树(简称BST)又称二叉查找(搜索)树,其定义为:二叉排序树或者是空树,或者是满足如下性质(BST性质)的二叉树:❶若它的左子树非空,则左子树上所有节点值(指关键字值)均小于根节点值;❷若它的右子树非空,则右子树上所有节点值均大于根节点值;❸左、右子树本身又各是一棵二叉排序树。
注意:二叉排序树中没有相同关键字的节点。
二叉树结构满足BST性质:节点值约束二叉排序树503080209010854035252388例如:是二叉排序树。
66不试一试二叉排序树的中序遍历序列有什么特点?二叉排序树的节点类型如下:typedef struct node{KeyType key;//关键字项InfoType data;//其他数据域struct node*lchild,*rchild;//左右孩子指针}BSTNode;二叉排序树可看做是一个有序表,所以在二叉排序树上进行查找,和二分查找类似,也是一个逐步缩小查找范围的过程。
1、二叉排序树上的查找Nk< bt->keybtk> bt->key 每一层只和一个节点进行关键字比较!∧∧p查找到p所指节点若k<p->data,并且p->lchild=NULL,查找失败。
若k>p->data,并且p->rchild=NULL,查找失败。
查找失败的情况加上外部节点一个外部节点对应某内部节点的一个NULL指针递归查找算法SearchBST()如下(在二叉排序树bt上查找关键字为k的记录,成功时返回该节点指针,否则返回NULL):BSTNode*SearchBST(BSTNode*bt,KeyType k){if(bt==NULL||bt->key==k)//递归出口return bt;if(k<bt->key)return SearchBST(bt->lchild,k);//在左子树中递归查找elsereturn SearchBST(bt->rchild,k);//在右子树中递归查找}在二叉排序树中插入一个关键字为k的新节点,要保证插入后仍满足BST性质。
数据结构二叉树知识点总结

数据结构⼆叉树知识点总结术语1. 节点的度:⼀个节点含有的⼦树的个数称为该节点的度;2. 叶节点或终端节点:度为零的节点;3. ⾮终端节点或分⽀节点:度不为零的节点;4. ⽗亲节点或⽗节点:若⼀个节点含有⼦节点,则这个节点称为其⼦节点的⽗节点;5. 兄弟节点:具有相同⽗节点的节点互称为兄弟节点;6. 节点的层次:从根开始定义起,根为第1层,根的⼦节点为第2层,以此类推;7. 树的⾼度或深度:树中节点的最⼤层次;8. 堂兄弟节点:⽗节点在同⼀层的节点互为堂兄弟;9. 节点的祖先:从根到该节点所经分⽀上的所有节点;10. 孙:以某节点为根的⼦树中任⼀节点都称为该节点的⼦孙。
11. 森林:由m(m>=0)棵互不相交的树的集合称为森林;12. 满⼆叉树:⼀棵深度为k,且有2^k-1 (2的k次⽅减⼀)个节点称之为满⼆叉树13. 完全⼆叉树:完全⼆叉树是由满⼆叉树⽽引出来的。
对于深度为K的,有n个结点的⼆叉树,当且仅当其每⼀个结点都与深度为K的满⼆叉树中编号从1⾄n的结点⼀⼀对应时称之为完全⼆叉树。
叶节点只能出现在最下层和次下层,并且最下⾯⼀层的结点都集中在该层最左边的若⼲位置的⼆叉树⼆叉树的性质1.在⾮空⼆叉树中,第i层的结点总数不超过2^(i-1),i>=1;2.深度为h的⼆叉树最多有2^h-1个结点(h>=1),最少有h个结点;3.对于任意⼀棵⼆叉树,如果其叶结点数为N0,⽽度数为2的结点总数为N2,则N0=N2+1;4.具有n个结点的完全⼆叉树的深度为K =[log2n」+1(取下整数)5.有N个结点的完全⼆叉树各结点如果⽤顺序⽅式存储,则结点之间有如下关系:若I为结点编号则如果I>1,则其⽗结点的编号为I/2;6.完全⼆叉树,如果2*I<=N,则其左⼉⼦(即左⼦树的根结点)的编号为2*I;若2*I>N,则⽆左⼉⼦;如果2*I+1<=N,则其右⼉⼦的结点编号为2*I+1;若2*I+1>N,则⽆右⼉⼦。
树和二叉树的计算公式

树和二叉树的计算公式
树和二叉树是计算机科学中重要的数据结构,它们可以用于各种算法和数据处理应用。
在计算树和二叉树的性质和操作时,需要使用一些计算公式。
一、树的计算公式
1. 节点总数公式:假设一棵树有n个节点,那么它的节点总数
为n=1+r1+r2+...+rk,其中r1、r2、...、rk分别表示每个节点的
子节点数。
2. 叶子节点数公式:一棵树的叶子节点数等于每个非叶节点子
节点数之和加1,即l=r1+r2+...+rk+1。
3. 深度公式:一棵树的深度为从根节点到最深叶子节点的路径
长度,可以用递归的方式计算:d(T)=max{d(T1),d(T2),...,d(Tk)}+1,其中T1、T2、...、Tk是根节点的子树,d(Ti)表示第i个子树的深度。
二、二叉树的计算公式
1. 节点总数公式:假设一棵二叉树有n个节点,那么它的节点
总数为n=2^h-1,其中h为树的高度。
2. 叶子节点数公式:一棵二叉树的叶子节点数等于度数为2的
节点数加1,即l=n/2+1。
3. 深度公式:一棵二叉树的深度为从根节点到最深叶子节点的
路径长度,可以用递归的方式计算:d(T)=max{d(T1),d(T2)}+1,其
中T1、T2是根节点的左右子树,d(Ti)表示第i个子树的深度。
以上是树和二叉树的一些常用计算公式,可以用于分析和设计算法,帮助开发人员更好地理解和应用这些数据结构。
二 叉 树

下图是1.2中所示的完全二叉树的顺序存储示意图。
例如,bt[3]
3=/12, 即在bt[1]中,其左
孩子在bt[2i]=bt[6]中,右孩子在bt[2i+1]=bt[7]中。
目录
二 叉 树
2)一般二叉树的顺序存储 一般的二叉树采取的办法是按完全二叉树的形式补齐 二叉树所缺少的结点,对补齐后的二叉树进行编号,将二 叉树的原有结点按编号存储到一维数组中。 下图给出了一棵一般二叉树改造后的完全二叉树形态 和其顺序存储状态示意图。
目录
二 叉 树
2021年1月30日星期六
性质3 对于一棵非空的二叉树,如果叶子结点数 为n0,度数为2的结点数为n2,则有n0=n2+1。
性质4 具有n个结点的完全二叉树的深度k log2n +1。
性质5 对于具有n个结点的完全二叉树,如果按照 」 从上到下和从左到右的顺序对二叉树中的所有结点从1
则ki无左孩子结点,即ki是叶子结点。因此完全二叉
树中编号i> n / 2 的结点必定是叶子结点。 (3)若2i+1≤n,则ki的右孩子结点编号是2i+1;
否则ki无右孩子结点。
目录
二 叉 树
2021年1月30日星期六
可用一维数组bt[]存放一棵完全二叉树,将标号 为i的结点的数据元素存放在分量bt[i]中,bt[0]不 用或用来存储结点数目。
typedef struct BiTNode { // 结点结构
ElemType data;
2021年1月30日星期六
目录
二 叉 树
二叉树、树及有序树是有区别的,二叉树不是树的特 例,主要差别在于二叉树的子树有左右之分。
在有序树中,虽然一个结点的孩子之间是有左右次序 的,但若该结点只有一个孩子时,就无须区分其左右次序。
计算机二级二叉树知识点

计算机二级二叉树知识点1.二叉树的定义:二叉树是一种常见的树形结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉树的节点结构通常包括一个数据元素和指向左右子节点的指针。
2.二叉树的性质:(1)二叉树的第i层最多有2^(i-1)个节点。
(2)高度为h的二叉树最多有2^h-1个节点。
(3)对于任意一棵二叉树,如果其叶子节点数为n0,度为2的节点数为n2,则n0=n2+1(4)一棵深度为k且节点总数为n的二叉树,当且仅当其满足2^(k-1)<=n<=2^k-1时,才称为完全二叉树。
3.二叉树的分类:(1)满二叉树:除了叶子节点之外,每个节点都有两个子节点,且所有叶子节点在同一层次上。
(2)完全二叉树:最后一层之前的层都是满的,并且最后一层的节点都靠左排列。
(3)平衡二叉树:左右子树的高度差不超过1的二叉树。
(4)线索二叉树:对于每个节点,除了指向其左右子节点的指针外,还包含指向其在其中一种序列下的前驱节点和后继节点的指针。
4.二叉树的遍历方法:(1)前序遍历:先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。
(2)中序遍历:先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。
(3)后序遍历:先递归地遍历左子树,然后递归地遍历右子树,最后访问根节点。
(4)层次遍历:按照从上到下、从左到右的顺序逐层访问每个节点。
5.二叉树:二叉树(Binary Search Tree,BST)是一种特殊的二叉树,它的每个节点的值都大于其左子树中的所有节点值,小于其右子树中的所有节点值。
因此,对于一个二叉树,可以采用中序遍历的方法得到一个有序序列。
二叉树的插入操作:按照二叉树的定义,从根节点开始,将要插入的值与当前节点的值比较,如果小于当前节点的值,则向左子树递归插入,如果大于当前节点的值,则向右子树递归插入,直至找到一个空节点,然后插入新节点。
二叉树的删除操作:删除一个节点需要考虑三种情况:删除节点没有子节点、只有一个子节点、有两个子节点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
〃二叉树类template <class T> class Binary Tree {public:BinaryNode<T> *root;〃构造空二叉树//以标明空子树的先根序列构造一棵二叉树〃以先根和中根序列构造二叉树 〃析构函数〃判断是否空二叉树 〃先根次序遍历二叉树 //中根次序遍历二叉树//后根次序遍历二叉树 〃返冋二叉树的结点个数int height();〃返回二叉BinaryNode<T>* search(T value);//查找首次BinaryNode<T>* getParent(BinaryNode<T>*node); 〃返回 node 结点的父母结点BinaryNode<T>* insert(BinaryNode<T> *p, T value, bool leftChild=true); 〃插入 value 作为 p结点的孩子void remove(BinaryNode<T> *p, bool leftChild=true); 〃删除 p 结点的左或右子树BinaryNode<T>* create(T prelist[], int n, int &i); 〃以标明空子树的先根遍历序列创建子#include "BinaryNode.h" #include "SeqStack.h” #include "LinkedStack.h u #include "SeqQueue.h" //#include "LinkedQueue.h"〃二叉树的二叉链表结点类 //顺序栈 〃链式栈 〃顺序循环队列 〃链式队列〃二叉树类〃指向根结点BinaryTree();BinaryTree(T prelist[], int n);BinaryTree(T prelist[], T inlistf], int n); 〜BinaryTree(); bool isEmptyO; void preOrder(); void inOrder(); void postOrder(); int count();void printGList(); void inOrderTraverse(); void levelOrder(); private:void preOrder(BinaryNode<T> *p); void inOrder(BinaryNode<T> *p); void postOrder(BinaryNode<T> *p); void destroy(BinaryNode<T> *p);〃以广义表表示输出二叉树〃中根次序遍历二叉树的非递归算法 〃按层次遍历二叉树〃先根次序遍历以P 结点为根的子树 〃屮根次序遍历以P 结点为根的子树 〃后根次序遍历以P 结点为根的子树 〃撤销二叉树BinaryNode<T>* create(T prelistf], T inlistf], int preStart, int inStart, int n); 〃以先根和屮 根序列创建一棵子树int count(BinaryNode<T> *p); 〃返冋以p 结点为根的子树结点个数 int height(BinaryNode<T> *p);//返冋以p 结点为根的子树高度BinaryNode<T>* search(BinaryNode<T> *p, T value); 〃在以 p 为根的子树屮查找首次出 现的值为value 的结点BinaryNode<T>* getParent(BinaryNode<T> BinaryNode<T> *node);void replaceAll(BinaryNode<T> *p, T old, T value); 〃在以 p 为根的子树中实现全部 替换 bool equals(BinaryNode<T> *p, BinaryNode<T> *q);〃判断以 p 和 q 结点为根的两棵子树是否相等BinaryNode<T>* copy(BinaryNode<T> *p);〃第8章习题bool isSorted(BinaryNode<T>* p);void printGList(BinaryNode<T> *p); 树〃第6章习题public: void leaf(); int countLeaf();bool replace(T old, T value); valuevoid replaceAll(T old, T value); int operator==(BinaryTree<T> &bitree); BinaryTree(BinaryTree<T> &bitree); void preOrderTraverse(); bool isSorted();〃以广义表表示输出以p 结点为根的子〃遍历输出叶子结点 〃返回二叉树的叶子结点数〃将首次岀现的值为old 结点值替换为〃将值为old 的结点全部替换为value //比较两棵二叉树是否相等,重载运算符 〃由已知的bitree 构造二叉树 〃先根次序遍历二叉树的非递归算法 〃判断一棵二叉树是否为二叉排序树 private:void leaf(BinaryNode<T> *p); 结点 int countLeaf(BinaryNode<T> *p);个数〃输出以p 结点为根的子树的所有叶子 〃返回以p 结点为根的子树的叶子结点〃复制以p 根的子二叉树template <class T>B in aryTree<T>::BinaryTree()〃构造空二叉树root = NULL;template <class T>bool BinaryTree<T>::isEmptyO { return root==NULL;}〃3・二叉树的先根、中根和后根次序遍历算法template <class T>void BinaryTree<T>::preOrder(){cout«,*先根次序遍历二叉树:”;preOrder(root); 数cout«endl;}template <class T>void BinaryTree<T>::preOrder(BinaryNode<T> *p) 归函数{if(p!=NULL){cout«p->data«H preOrder(p->Ieft);递归调用preOrder(p->right);递归调用}1template <class T>void BinaryTree<T>::inOrder(){cout«"中根次序遍历二叉树:”;inOrder(root); 数cout«endl;}template <class T>void BinaryTree<T>::inOrder(BinaryNode<T> *p)归函数if(p!=NULL){〃判断是否空二叉树〃先根次序遍历二叉树〃调用先根次序遍历二叉树的递归函〃先根次序遍历以p结点为根的子树,递〃若二叉树不空〃访问当前结点〃按先根次序遍历当前结点的左子树,〃按先根次序遍历当前结点的右子树,〃中根次序遍历二叉树〃调用中根次序遍历二叉树的递归函〃中根次序遍历以p结点为根的子树,递inOrder(p->left); cout«p->data«H inOrder(p->right);template <class T>void BinaryTree<T>::postOrder() //后根次序遍历二叉树{cout«,*后根次序遍历二叉树:”;postOrder(root); 〃调用后根次序遍历二叉树的递归函数cout«endl;}template <class T>void BinaryTree<T>::postOrder(BinaryNode<T> *p) 〃后根次序遍历以p 结点为根的子树,递归函数{if (p!二NULL){postOrder(p->left);postOrder(p->right);cout«p->data«"}}//4.基于遍历的操作template <class T>B inaiyTree<T> ~ B inaryTree() 〃析构函数{cout«n撤销二叉树:”;destroy(root);cout«endl;} template <class T>void BinaryTree<T>::destroy(BinaryNode<T> *p) 〃撤销以p 结点为根的子树,后根次序遍历讦(p!=NULL){destroy(p->left); destroy(p->right);cout«p->data«'r 〃显示撤销结点的次序 delete p; } }//【例6.1】构造并遍历二叉树。
template <class T> int BinaryTree<T>::count() 〃返回二叉树的结点个数{return count(root); }template <class T>int BinaryTree<T>::count(BinaryNode<T> *p) 〃返冋以p 结点为根的子树结点个数 {if (p==NULL) return 0; elsereturn I +count(p->left)+count(p->right);}template <class T> int BinaryTree<T>::height() {return height(root); }template <class T>int BinaryTree<T>::height(BinaryNode<T> *p) 序遍历{if(p!=NULL) {int lh = height(p->left); int rh = height(p ・>right); return (lh>=rh) ? lh+1 : rh+1; }return 0;〃返回二叉树的高度〃返回以p 结点为根的子树高度,后根次 〃求左子树的高度template <class T>BinaiyNode<T>* BinaiyTree<T>::search(T value)〃查找首次出现的值为 value 结点{return search(root, value);template <class T>BinaryNode<T>* BinaryTree<T>::search(BinaryNode<T> 水p, T value) 〃在以 p 为根的子树中 查找{〃先根次序遍历查找值为value 的结点,返回首次出现结点指针,若未找到返回NULLtemplate <class T>BinaryNode<T>* BinaryTree<T>::getParent(BinaryNode<T> *node) 〃返冋 node 结点的父母 结点指针 { 〃若空树、未找到或node 为根,返回 NULLif (root==NULL || node==NULL || node==root)return NULL; retum getParent(root, node);template <class T>BinaryNode<T>* BinaryTree<T>::getParent(BinaryNode<T>BinaryNode<T> *node){〃在以p 为根的子树中查找并返回node 结点的父母结点指针BinaryNode<T> *find=NULL; if(p!=NULL){if (p->left==node || p->right==node)return p;find = getParent(p->left, node); if (find 二二NULL)BinaryNode<T> *find 二NULL; if (p!二NULL){if (p->data==value)retum p; find = search(p->left, value);归调用if (find==NULL)find = search(p ・>right,value); }return find;〃记载找到结点〃查找成功,返回结点指针〃在左子树中查找,find 指向找到结点,递〃若在左子树中未找到〃则继续在右子树屮查找,递归调用〃返回查找结果find = getParent(p->right, node);}return find;}//5.构造二叉树template <class T>BinaryTree<T>::BinaryTree(T prelistf], T inlistf], int n) 〃以先根和中根序列构造二叉树//n指定序列长度root = create(prelist, inlist, 0, 0, n);}template <class T>BinaryNode<T>* BinaryTree<T>::create(T prelist[], T inlist[], int preStart,int inStart, int n) 〃以先根和中根序列创建一棵子树,子树根结点是prelist[i],返回根结点指针BinaryNode<T> *p=NULL;讦(n>0)return p;template <class T>BinaryTree<T>::BinaryTree(T prelist[], int n) 〃以标明空子树的先根序列构造二叉树{int i=();root=create(prelist, n, i);}template <class T>BinaryNode<T>* BinaryTree<T>::create(T prelistf], int n, int &i){ 〃以标明空子树的先根次序遍历序列创建一棵子树,子树根结点是prelist[i],返回根结点指针BinaryNode<T> *p=NULL;p = new BinaryNode<T>(elem); p->left = create(prelist, n, i); p->right = create(prelist, n, i); } } return p;//【例6.2] 输出二叉树中指定结点的所有祖先结点。