转:http://www.cnblogs.com/pacoson/p/4898947.html
【0】README
0.1)本文旨在理清二叉树的先中后序遍历, 以及如何建立二叉树等相关内容; 0.2)本文涉及代码均为原创; 0.3)本文中遍历后的打印结果,朋友您可以直接写出二叉树的节点构造出来; Attention):
- A1)要建立二叉树或者普通树, 这就涉及到插入节点的问题; 进而涉及到找到插入到哪个父节点的哪个孩子问题(left or right);当然,我们可以抽取一个 find 方法出来找出父节点, find 方法的关键是 首先要对是否为空树进行测试;
-
A2) 而且,你要知道,在后面的二叉查找树的 插入方法insert 和 我们的 二叉树或者普通树的插入方法是不同的, 因为二叉查找树的定义是 :“该树中的每个节点 X, 它的左子树中所有关键字值 小于 X 的关键字值, 而它的右子树中所有关键字值大于 X 的关键字值”; 换句话说,在二叉查找树中,节点之间是有大小关联的, 而在二叉树和其它普通树中,节点间的数值大小是没有关系的,任意的 (特别要注意);
【1】二叉树相关概念
1.1)定义:二叉树是一颗树,其中每个节点都不能有多余两个儿子; 1.2)重要性质:平均二叉树的深度要比N小得多(N是该二叉树的节点个数);
【2】二叉树的表示方法说明:
2.1)树一般画成圆圈并用一些直线连接起来,因为二叉树实际上就是图,但涉及到树时, 我们也不明显地画出 NULL 指针,因为具有N个节点的每一个二叉树都将需要 N+1 个 NULL 指针; 2.2)为什么是N+1个NULL 指针? 因为N个节点==2N个指针==N-1条边;故余下N+1条边为 NULL , 即N+1个指针为NULL;(除根节点root外,每个节点都对应一条边)
【3】对二叉树的先序 + 中序 + 后序遍历
Attention)对于二叉树的遍历,我们的简单想法是, 遍历后的结果,我可以画出该二叉树节点的构造; 3.1)先序遍历步骤:如果二叉树为空树, 则什么都不做; 否则:
- step1)访问根节点;
- step2)先序遍历左子树;
- step3)先序遍历右子树;
3.2)中序遍历步骤:如果二叉树为空树, 则什么都不做; 否则:
- step1)中序遍历左子树;
- step2)访问根节点;
- step3)中序遍历右子树;
3.3)后序遍历步骤:如果二叉树为空树, 则什么都不做; 否则:
- step1) 后序遍历左子树;
- step2) 后序遍历右子树;
- step3) 访问根节点;