树
树的概念和常用术语
常用术语
节点
根节点
父节点
子节点
叶子节点:没有子节点的节点
节点的权:节点的值
路径:节点A到节点B的路径
层
子树
树的高度:最大层数
森林:多颗子树构成森林
二叉树概念
每个节点最多只有两个子节点的树,叫二叉树
若该二叉树是满二叉树,节点数是2^n - 1,n为层数
完全二叉树:每一层节点都是连续的,即有子节点的父节点都有两个子节点
建立二叉树
思路分析
建立节点类
包含信息,左孩子指针,右孩子指针
二叉树的前中后序遍历算法
前序遍历
前序遍历
先输出父节点,再遍历左子树和右子树
中,左,右
思路分析
先输出当前节点,初始是root节点
如果左子节点不为空,则递归继续前序遍历
如果右子节点不为空,则递归继续前序遍历
中序遍历
中序遍历
先遍历左子树,在输出父节点,再遍历右子树
左,中,右
思路分析
如果左子节点不为空,则递归继续中序遍历
输出当前节点
如果右子节点不为空,则递归继续中序遍历
后序遍历
后序遍历
先遍历左子树,再遍历右子树,最后输出父节点
左,右,中
思路分析
如果左子节点不为空,则递归继续中序遍历
如果右子节点不为空,则递归继续中序遍历
输出当前节点
代码实现
package com.why.tree;
import java.sql.SQLOutput;
/**
* @Description TODO 前中后序遍历
* @Author why
* @Date 2020/11/4 16:49
* Version 1.0
**/
public class BinaryTreeDemo {
public static void main(String[] args) {
//创建二叉树
BinaryTree binaryTree = new BinaryTree();
//创建需要的节点
BNode root = new BNode(1,"why");
BNode node1 = new BNode(1,"cjl");
BNode node2 = new BNode(1,"wl");
BNode node3 = new BNode(1,"lrx");
//手动创建二叉树,后边以递归方式建立二叉树
root.setLeftChild(node1);
root.setRightChild(node2);
node2.setRightChild(node3);
//设置根节点
binaryTree.setRoot(root);
System.out.println("前序遍历:");
binaryTree.preOrder();
System.out.println();
System.out.println("中序遍历:");
binaryTree.midOrder();
System.out.println();
System.out.println("后序遍历:");
binaryTree.postOrder();
}
}
/**
* 定义二叉树
*/
class BinaryTree{
private BNode root;
public BNode getRoot() {
return root;
}
public void setRoot(BNode root) {
this.root = root;
}
/**
* 前序遍历
*/
public void preOrder(){
if (this.root != null){
this.root.preOrder();
}else {
System.out.println("二叉树为空");
}
}
/**
* 中序遍历
*/
public void midOrder(){
if (this.root != null){
this.root.midOrder();
}else {
System.out.println("二叉树为空");
}
}
/**
* 后序遍历
*/