博客
关于我
二叉树之先序遍历
阅读量:424 次
发布时间:2019-03-06

本文共 1120 字,大约阅读时间需要 3 分钟。

  二叉树不同于列表、链表、栈、队列这些线性结构,也不同于图这种非线性结构,它属于半线性结构。我们在搞二叉树的时候不要从轮子造起,而要善于引用此前的工作成果,转化成以前已经玩烂的线性结构。

  根据树根、左娃、右娃的先后顺序,分别有先序遍历(V-L-R)、中序遍历(L-V-R)、后序遍历(L-R-V),说一个先序遍历就够了。

  先序遍历的递归实现方法:

template 
void traverse(BinNodePosi(T) x,VST & visit){ if(!x) return; visit(x->data); traverse(x->lChild,visit); traverse(x->rChild,visit); }

  先序遍历的迭代实现方法(栈)一:

template 
void traverse(BinNodePosi(T) x,VST & visit){ stack
S; //辅助栈 if(x) S.push(x); //根节点入栈 while( !S.empty()){ x=S.pop(); visit(x->data); if( hasRchild(x) ) S.push( x->rChild ); if( hasLchild(x) ) S.push( x->lChild ); } }

 示意图:

  先序遍历的迭代实现方法(栈)二:

template 
static void visitAlongLeftBranch( BinNodePosi(T) x, VST &visit, stack
S){ while(x){ visit(x->data); S.push(x->lChild); x=x->rChild; }}void traverse(BinNodePosi(T) x, VST &visit ){ stack
S; while(true){ //以右子树为单位,逐批访问节点 visitAlongLeftBranch(x,visit,S); //访问子树x的左侧链,右子树入栈 if(S.empty()) break; x=S.pop(); }}

图示意:

 

转载地址:http://vzbuz.baihongyu.com/

你可能感兴趣的文章
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
MySQL 导出数据
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
MySQL 常见的 9 种优化方法
查看>>
MySQL 常见的开放性问题
查看>>
Mysql 常见错误
查看>>
mysql 常见问题
查看>>
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>