数据结构03-二叉树
概念
二叉树由一个根节点及两个不相交的左子树和右子树组成;
二叉树可以是空集合,可以是空左子树或空右子树,或者左右子树都是空,也可以左右子树都不为空;
二叉树一般用链表指针实现;
遍历
二叉树的遍历方式:
1.深度优先遍历二叉树,利用递归实现
void DeepOrder(Tree tree)
{
if(tree!=null){
visit(tree.root);//访问根节点 前序遍历
DeepOrder(tree.left);//访问左节点
DeepOrder(tree.right);//访问右节点
}
}
2.非递归深度优先遍历二叉树
void DeepOrder(Tree tree)
{
Tree tmp=tree.root; //非递归深度优先前序遍历
Stack.init;
while(!Stack.isEmpty() || tmp){
if(!tmp){
visit(tmp);
Stack.push(tmp);
tmp=tmp.leftTree;
}else{
tmp=Stack.top();
Stack.pop;
tmp=tmp.rightTree;
}
}
}
从根结点开始,每遇到一个结点,就访问该结点,并把此结点入栈,然后访问结点的左子树;
访问完左子树后,从栈顶不断pop结点,并遍历结点的右子树;
void DeepOrder(Tree tree)
{
Tree tmp=tree.root; //非递归深度优先中序遍历
Stack.init;
while(!Stack.isEmpty() || tmp){
if(!tmp){
Stack.push(tmp);
tmp=tmp.leftTree;
}else{
tmp=Stack.top();
visit(tmp);
Stack.pop;
tmp=tmp.rightTree;
}
}
}
从根结点开始,每遇到一个结点,把此结点入栈,然后访问结点的左子树;
访问完左子树后,访问栈顶结点,从栈顶不断pop结点,并访问结点的右子树;
3.广度优先遍历二叉树
深度优先遍历
深度遍历二叉树时,根据根节点的遍历顺序,可以分成下面3种遍历:
前序遍历二叉树:1.先访问根节点 2.访问左节点 3.访问右节点
中序遍历二叉树:1.先访问左节点 2.访问根节点 3.访问右节点
后序遍历二叉树:1.先访问左节点 2.访问右节点 3.访问根节点
以下二叉树

前序遍历:ABDCEGFHI
中序遍历:DBAEGCHFI
后序遍历:DBGEHIFCA
可以根据二叉树的遍历结果倒推出二叉树的结构;

浙公网安备 33010602011771号