这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战
二叉树
二叉树是一种数据结构,为什么是树呢?如何实现?可以解决什么问题?如何应用到实际案例当中?请往后看。
简介
树(tree)是一种数据类型,一般树状的数据集合就可以用“树”来表示,什么是树状的数据集合呢,就是自上而下有层级关系的集合,上小下大,欻一下的散开跟树很像,可以由n个节点通过“边”连接起来。
二叉树则是有限节点的集合,也可以是空集。每个节点上最多两个子节点,并且左侧子节点的值肯定小于父节点的值,右侧子节点的值肯定大于父节点的值。左右两节点不会相交,各自有自己的左子节点和右子节点,你可能不知道,二叉树也有递归的概念,最近递归接触的有点多呀。
二叉树实现
上面刚说到二叉树也用到了递归的思想,是因为它的每个节点最多有两个子节点,每个子节点又最多有两个子子节点,也就相当于两个二叉树,因此可以用递归思想实现二叉树。
public class BinaryTreeNode {
private int data;
private BinaryTreeNode leftChirld;
private BinaryTreeNode rightChirld;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public BinaryTreeNode getLeftChirld() {
return leftChirld;
}
public void setLeftChirld(BinaryTreeNode leftChirld) {
this.leftChirld = leftChirld;
}
public BinaryTreeNode getRightChirld() {
return rightChirld;
}
public void setRightChirld(BinaryTreeNode rightChirld) {
this.rightChirld = rightChirld;
}
}
二叉树遍历
二叉树的遍历是按照一定的规律来顺序遍历各二叉树的节点,对每一个节点都是访问有且仅有一次,一般通过递归思想区访问。二叉树根据对根节点先后先后顺序的遍历可分为:先根遍历、中根遍历、后根遍历。
/***
中根遍历
遍历左侧节点
访问根节点
遍历右侧节点
***/
public void infixTest(Node node){
if(node != null){
infixTest(node.leftChild);
System.out.print(node.data);
infixTest(node.rightChild);
}
}
/***
先根遍历
先访问根节点
遍历左侧节点
遍历右侧节点
***/
public void preTest(Node node){
if(node != null){
System.out.print(node.data);
preTest(node.leftChild);
preTest(node.rightChild);
}
}
/***
后根遍历
先遍历左侧树
遍历右侧节点
访问根节点
***/
public void postTest(Node node){
if(node != null){
postTest(node.leftChild);
postTest(node.rightChild);
System.out.print(node.data);
}
}
\