对于每一个节点,其子节点数目最多为2个,且左子树的内容比根节点小,右子树的内容比根节点大。
构造一颗二叉树
一个二叉树应该包含存储的内容(data)、左子树(leftchild)、右子树(rightchild)
public class TreeNode {
TreeNode leftChild; //左子数
TreeNode rightChild; //右子树
int data; //数据
public TreeNode(int data){
this.data = data;
}
}
二叉树节点的添加
//使用一个root节点指向根节点
public void add(int o){
TreeNode newNode = new TreeNode(o);
if(root == null){
//当根节点为空的时候,直接将其作为根节点
root = newNode;
size ++;
return;
}
TreeNode node = root; //使用一个变量指向根节点
do{
if(o < node.data){
//当根节点的元素值大于要加入的元素值,此时需要加入左子树
if(node.leftChild == null){
node.leftChild = newNode;
size ++;
return;
}else {
//使node节点指向左子树
node = node.leftChild;
}
}else {
//当根节点的元素值小于要加入的元素值,此时需要加入右子树
if(node.rightChild == null){
node.rightChild = newNode;
size ++;
return;
}else {
node = node.rightChild;
}
}
}while (node != null);
}
二叉树的遍历
先序遍历 跟节点-左子树-右子树
private void pre(TreeNode root){
if(root != null){
System.out.print (root.data + " ");
pre (root.leftChild);
pre ( root.rightChild );
}
}
中序遍历 左子树-根节点-右子树
private void mid(TreeNode root){
if(root != null){
mid ( root.leftChild );
System.out.print(root.data);
mid ( root.rightChild );
}
}
后续遍历 左子树-右子树-根节点
private void after(TreeNode root){
if(root != null){
this.after ( root.leftChild );
this.after ( root.rightChild );
System.out.print(root.data);
}
}
获取二叉树的度(高度)
先找左子树的高度,再找右子树的高度,找出较大的+1即为树的高度。