0. 前言
树结构是面试最长考察的一种数据结构,因为数这种结构的难度介于普通的数组和图之间,一般能够比较好的考察一个人的空间想象能力和对递归的使用。通常手写算法部分考察到树结构并不会很难,都是一些最基本的操作,例如前中后序遍历(某些大厂要求比较高,会让非递归方式实现,这个需要使用到栈进行存储,思考上有一定难度,后续会进行整理),构建一棵树,求数的深度,节点的个数等。只要理解树的结构和递归的过程,面试前复习一下应该不难。
1. 典型操作简要实现
下面是一些典型操作的实现,可以用作复习之用。
注意对于一些简单的操作代码一定要写的比较简洁,一目了然。
部分内容整理自网络
void CreateBiTree(BiTree &T)
{
//先序创建二叉树
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{
//中序遍历
if(T)
{
InOrderTraverse(T->lchild);
cout<<T->data;
InOrderTraverse(T->rchild);
}
}
void PreOrderTraverse(BiTree T)
{
//先序遍历
if(T)
{
cout<<T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse