今天开始复习数据结构,感觉基础的东西一点还不会
“遍历”是二叉树各种操作的基础,通过遍历操作可以把对节点的输出延伸到对节点的判别,计数等操作,可以解决一些关于二叉树其他实际问题,如果在遍历过程生成节点,这样就能建立二叉树的存储结构。
于是就开始记录书上的基本操作。
1.先序遍历建立二叉链表
先序遍历的访问顺序是:根左右。
void CreateBiTree(BiTree &T){
cin>>ch;
if(ch == '#') T=NULL;
else{
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
思考:上面的代码利用的是先序遍历顺序来建立节点。并且利用&引用不断连接左右子节点的方向。
2.复制二叉树
也是利用二叉树的先序遍历
void Copy(BiTree T,BiTree &NewT){
if(T==NULL)
{
NewT = NULL;
return;
}else{
NewT = new BiTNode;
NewT->data = T->data;
Copy(T->lchild,NewT->lchild);
Copy(T->rchild,NewT->rchild);
}
}
先序遍历
3.计算二叉树的深度
利用后序遍历,即访问顺序是:左右根
int Depth(BiTree T){
if(T ==NULL)return 0;
else{
m = Depth(T->lchild);
n = Depth(T->rchild);
if(m>n)return m+1;
else
return n+1;
结论:利用先访问左子树,再右子树,再根的顺序。
4.统计二叉树种节点的个数
利用后序遍历顺序
int NodeCount(BiTree T){
if(T == NULL)return 0;
else{
return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
}
结论:利用后序遍历。
最好做一题 根据先序和中序构建二叉树的题目。记下。