一、什么是二叉树?
二、二叉树的遍历方法
先序遍历:根—>左—>右
中序遍历:左—>根—>右
后序遍历:左—>右—>根
先根后左逆
例:

代码实现先序遍历:
/*** 先序遍历* @param rootTreeNode 根节点*/public static void preTraverseBTree(TreeNode rootTreeNode) {//如果中序或后序遍历只需要改变下面代码的顺序就好了if (rootTreeNode != null) {//访问根节点System.out.println(rootTreeNode.getValue());//访问左节点preTraverseBTree(rootTreeNode.getLefTreeNode());//访问右节点preTraverseBTree(rootTreeNode.getRightNode());}}
注意:
通过先序和中序或者中序和后序我们可以还原出原始的二叉树,但是通过先序和后续是无法还原出原始的二叉树的,即必须知道中序遍历的结果才能还原二叉树;
三、二叉查找树
定义:当前根节点的左边全部比根节点小,当前根节点的右边全部比根节点大。
优点:明眼人可以看出,这对我们来找一个数是非常方便快捷的
往往我们动态创建二叉树都是创建二叉查找树
动态创建二叉树代码实现:
TreeRoot.java表示根节点
public class TreeRoot {private TreeNode treeRoot;public TreeNode getTreeRoot() {return treeRoot;}public void setTreeRoot(TreeNode treeRoot) {this.treeRoot = treeRoot;}}
比较与根谁大,大的往右边,小的往左边:
/*** 动态创建二叉查找树** @param treeRoot 根节点* @param value 节点的值*/public static void createTree(TreeRoot treeRoot, int value) {//如果树根为空(第一次访问),将第一个值作为根节点if (treeRoot.getTreeRoot() == null) {TreeNode treeNode = new TreeNode(value);treeRoot.setTreeRoot(treeNode);} else {//当前树根TreeNode tempRoot = treeRoot.getTreeRoot();while (tempRoot != null) {//当前值大于根值,往右边走if (value > tempRoot.getValue()) {//右边没有树根,那就直接插入if (tempRoot.getRightNode() == null) {tempRoot.setRightNode(new TreeNode(value));return ;} else {//如果右边有树根,到右边的树根去tempRoot = tempRoot.getRightNode();}} else {//左没有树根,那就直接插入if (tempRoot.getLefTreeNode() == null) {tempRoot.setLefTreeNode(new TreeNode(value));return;} else {//如果左有树根,到左边的树根去tempRoot = tempRoot.getLefTreeNode();}}}}}
测试代码:
int[] arrays = {2, 3, 1, 4, 5};//动态创建树TreeRoot root = new TreeRoot();for (int value : arrays) {createTree(root, value);}//先序遍历树preTraverseBTree(root.getTreeRoot());System.out.println("---------------");//中序遍历树inTraverseBTree(root.getTreeRoot());System.out.println("---------------");
测试结果:
