内容简介:若二叉树非空,则执行以下操作:若二叉树非空,则执行以下操作:若二叉树非空,则执行以下操作:
前序遍历
若二叉树非空,则执行以下操作:
- 访问根结点;
- 先序遍历左子树;
- 先序遍历右子树
中序遍历
若二叉树非空,则执行以下操作:
- 中序遍历左子树;
- 访问根结点;
- 中序遍历右子树。
后序遍历
若二叉树非空,则执行以下操作:
- 后序遍历左子树;
- 后序遍历右子树;
- 访问根结点
实例说明
graph TD 3-->1 3-->5 1-->2 5-->4 5-->6
对于上面的二叉树而言,
- 前序遍历结果: 3 1 2 5 4 6
- 中序遍历结果: 1 2 3 4 5 6
- 后序遍历结果: 2 1 4 6 5 3
树的遍历代码实现
定义一个树结构
@ToString class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
定义一个遍历方式的枚举
/** * 遍历的方向. */ enum Direct { /** * 中序 */ middle, /** * 前序 */ before, /** * 后序 */ after; }
实现代码
/** * 遍历. */ public void print(Direct direct) { StringBuffer stringBuffer = new StringBuffer(); print(stringBuffer, this, direct, "ROOT:"); System.out.println(stringBuffer.toString()); } private void print(StringBuffer stringBuffer, TreeNode treeNode, Direct direct, String node) { if (treeNode != null) { if (direct == Direct.before) { stringBuffer.append(node + treeNode.val + "\n"); print(stringBuffer, treeNode.left, direct, "L:"); print(stringBuffer, treeNode.right, direct, "R:"); } else if (direct == Direct.middle) { print(stringBuffer, treeNode.left, direct, "L:"); stringBuffer.append(node + treeNode.val + "\n"); print(stringBuffer, treeNode.right, direct, "R:"); } else { print(stringBuffer, treeNode.left, direct, "L:"); print(stringBuffer, treeNode.right, direct, "R:"); stringBuffer.append(node + treeNode.val + "\n"); } } }
二叉查询树实现了二分查找法
时间复杂度是Olog(n)到O(n),也就是说它最好的情况是Olog(n),当然运气不好,也就是你查询的是叶子节点,那就是O(n)了。
/* * 二分查找,最优时间复杂度OLog(n). */ private TreeNode search(TreeNode x, int key) { if (x == null) return x; int cmp = key - x.val; if (cmp < 0) return search(x.left, key); else if (cmp > 0) return search(x.right, key); else return x; } public TreeNode search(int key) { return search(this, key); } }
对于树的知识还有很多,本文章主要介绍树的遍历和查找!
以上所述就是小编给大家介绍的《二叉树的遍历和查找》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 二叉查找树的增加,删除,遍历 python
- 【PHP 实现数据结构】遍历二叉查找树
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入
- 数组常见的遍历循环方法、数组的循环遍历的效率对比
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP高级开发技术与应用
曹铁群、孙一江、张永学 / 清华大学出版社 / 2002-5-1 / 32.00
作为一本介绍PHP高级开发技术的书籍,本书并不像一般介绍PHP语言的书籍那样讲述大量的语法规则,罗列大量的函数,而是着眼于PHP在Web中的实际应用,特别是PHP对最新技术的支持,比如WAP技术、XML技术等。 本书涉及到的内容主要有:高级环境配置、高级语法和应用、正则表达式、面向对象技术、高级图像技术、用PHPLIB实现模板的处理、用PHPDoc实现文档的自动生成、PHP与组件技术、PH......一起来看看 《PHP高级开发技术与应用》 这本书的介绍吧!