内容导读:本文介绍了二叉树对象的创建,二叉树节点的遍历,以及计算二叉树的深度的方法。
创建二叉树
第1步:创建一个二叉树节点对象
/**
* 二叉树节点对象
*/
public class TreeNode {
// 节点值
public int nodeValue;
// 左节点
public TreeNode leftNode;
// 右节点
public TreeNode rightNode;
// 构造方法
public TreeNode(int nodeValue) {
this.nodeValue = nodeValue;
}
}
第2步:连接节点组建成二叉树结构
public TreeNode createBinaryTree() {
// 创建二叉树节点
TreeNode treeNode0 = new TreeNode(0);
TreeNode treeNode1 = new TreeNode(1);
TreeNode treeNode2 = new TreeNode(2);
TreeNode treeNode3 = new TreeNode(3);
TreeNode treeNode4 = new TreeNode(4);
TreeNode treeNode5 = new TreeNode(5);
TreeNode treeNode6 = new TreeNode(6);
TreeNode treeNode7 = new TreeNode(7);
TreeNode treeNode8 = new TreeNode(8);
TreeNode treeNode9 = new TreeNode(9);
TreeNode treeNode10 = new TreeNode(10);
// 连接二叉树节点
treeNode0.leftNode = treeNode1;
treeNode0.rightNode = treeNode2;
treeNode1.leftNode = treeNode3;
treeNode1.rightNode = treeNode4;
treeNode2.leftNode = treeNode5;
treeNode2.rightNode = treeNode6;
treeNode3.leftNode = treeNode7;
treeNode3.rightNode = treeNode8;
treeNode4.leftNode = treeNode9;
treeNode4.rightNode = treeNode10;
return treeNode0;
}
第3步:以上代码对应的二叉树结构如下
遍历二叉树
- 先序遍历(根左右)
输出结果:0→1→3→7→8→4→9→10→2→5→6
public void traverseBinaryTree(TreeNode treeNode) {
System.out.print(treeNode.nodeValue + "→");
if (treeNode.leftNode != null) {
traverseBinaryTree(treeNode.leftNode);
}
if (treeNode.rightNode != null) {
traverseBinaryTree(treeNode.rightNode);
}
}
- 中序遍历(左根右)
输出结果:7→3→8→1→9→4→10→0→5→2→6
public void traverseBinaryTree(TreeNode treeNode) {
if (treeNode.leftNode != null) {
traverseBinaryTree(treeNode.leftNode);
}
System.out.print(treeNode.nodeValue + "→");
if (treeNode.rightNode != null) {
traverseBinaryTree(treeNode.rightNode);
}
}
- 后序遍历(左右根)
输出结果:7→8→3→9→10→4→1→5→6→2→0
public void traverseBinaryTree(TreeNode treeNode) {
if (treeNode.leftNode != null) {
traverseBinaryTree(treeNode.leftNode);
}
if (treeNode.rightNode != null) {
traverseBinaryTree(treeNode.rightNode);
}
System.out.print(treeNode.nodeValue + "→");
}
以上三种遍历方法,遍历的代码是完全相同的,不同的在于何时输出节点值(或加入到集合中),每次递归遍历的过程中,方法的参数是作为根节点传递进来的。因此,采用哪种遍历方式,只需要调用消费数据的位置即可。
计算二叉树的深度
/** 计算二叉树的深度 */
public int getTreeDepth(TreeNode root) {
if (root == null) {
return 0;
} else {
int leftDepth = getTreeDepth(root.leftNode)+1;
int rightDepth = getTreeDepth(root.rightNode) + 1;
return Math.max(leftDepth, rightDepth);
}
}
参考资料: