概念:
遍历二叉树:
遍历:指按某条搜索路线遍访每个结点且不重复(又称周游)。
遍历的用途:它是树结构插入、删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心。
时间效率: O(n) //每个结点最多访问两次
空间效率: O(n) //栈占用的最大辅助空间
用栈进行迭代运算 和队列很像
先序: 中序:
void PreOrderlteration(BiTree T) void InOrderIteration(BiTree T)
{ stack<BiTree> s; stack<BiTree> s;
BiTree p; BiTree p = T;
if(T!=NULL) s.push(T); while(p!=NULL || !s.empty()){
while(!s.empty()){ while(p!=NULL){//一直走到左尽头
p=s.top(); s.push(p);//根节点进栈
s.pop(); p==p->lchild;//遍历左子树}
cout<<p->data<<" "; p = s.top();//左已访问右未访问
if(p->rchild!=NULL) s.push(p->rchild); s.pop();
if(p->lchild!=NULL) s.push(p->lchild); cout<<p->data<<" ";
} p=p->rchild;//准备遍历右子树
复制二叉树: 计算二叉树的深度
void Copy(BiTree T, BiTree &NewT) int Depth(BiTree T){
{//先序复制二叉树 //返回二叉树的深度
if (T==NULL) { NewT = NULL; return; } //递归结束,建空树 if(T==NULL) return 0;//空树,深度为0
else { else{
NewT = new BiTNode; m=Depth(T->lchild);
NewT->data = T->data ; //复制根结点 n=Depth(T->rchild);
Copy(T->lchild, NewT->Lchild); //复制左子树 if(m>n) return(m+1);
Copy(T->rchild, NewT->rchild); //复制右子树 } else return(n+1);}
}
计算二叉树结点总数:
int NodeCount(BiTree T)
{
if(T==NULL) return 0;
else return NodeCount(T->lchild) +NodeCount(T->rchild)+1;
}
原文地址:https://www.cnblogs.com/snowlxy/p/10808726.html