二叉树是一种重要的数据结构,在文件管理、数据转发等领域都会用到。下面将详细地讲述二叉树的有关知识。首先是二叉树的建立。为了有更好的通用性,下面所有的代码都用实现。二叉树一般用二叉链表来表示,下面是其定义:
template<class T>
struct BTNode
{
T data;
BTNode<T>*leftChild,*rightChild;
};
首先是根据广义表形式的字符串建立二叉树,如A(B(D,E(G)),C(F(,H)))
BTNode<char>*createBinaryTreeByGeneralList(char*a)
{
BTNode<char>*currentNode,*root=NULL,*stack[100];
int top=-1,flag;
for(char*p=a;*p!='\0';p++)
{
switch(*p)
{
case '(':
stack[++top]=currentNode;
flag=1;
break;
case ')':
--top;
break;
case ',':
flag=2;
break;
default:
currentNode=new BTNode<char>();
currentNode->data=*p;
currentNode->leftChild=NULL;
currentNode->rightChild=NULL;
if(root==NULL)
root=currentNode;
else if(flag==1)
stack[top]->leftChild=currentNode;
else
stack[top]->rightChild=currentNode;
}
}
return root;
}
下面这个是按前序遍历序列顺序存储的数组建立二叉树
template<class T>
BTNode<T>*createBinaryTreeByPreOrderSequence(T valueArray[],int n,T flagValue)//暂时还没想到非递归的方法,所以就不加参数bool recursionFlag了。其中的flagValue是表示遇到它就代表相应的结点应该为NULL。
{
static int num=-1;
if(num<n)
{
T temp=valueArray[++nu