二叉树创建:
1.创建树的结点TreeNode,包含结点的编号no,结点的名字name,左子树left,右子树right,
2.创建树,创建树只需要创建有一个根节点(TreeNode root)就ok
二叉树遍历:
1,先序遍历:先输出根节点,再递归左子树,然后递归右子树
2,中序遍历:先递归左子树,然后输入根节点,再递归右子树
3,后序遍历:先递归左子树,再递归右子树,然后输出根节点
实验:
创建如下的二叉树并遍历
代码
package Tree; public class BinaryTreeDemo { public static void main(String[] args) { BinaryTree binaryTree = new BinaryTree(); //创建结点 TreeNode root = new TreeNode(1,"宋江"); TreeNode treeNode2 = new TreeNode(2,"林冲"); TreeNode treeNode3 = new TreeNode(3,"吴用"); TreeNode treeNode4 = new TreeNode(4,"关胜"); TreeNode treeNode5 = new TreeNode(5,"卢俊义"); //创建树结构 root.setLeft(treeNode2); root.setRight(treeNode3); treeNode3.setRight(treeNode5); treeNode3.setLeft(treeNode4); //挂上树 binaryTree.setTree(root); System.out.println("------------------"); System.out.println("前序遍历"); binaryTree.preOrder(); System.out.println("------------------"); System.out.println("中序遍历"); binaryTree.midOrder(); System.out.println("------------------"); System.out.println("后序遍历"); binaryTree.endOrder(); } } //创建树 class BinaryTree{ private TreeNode root; public void setTree(TreeNode 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("空树"); } } //后序遍历 public void endOrder(){ if (this.root != null){ this.root.endOrder(); } else { System.out.println("空树"); } } } //创建树结点 class TreeNode{ private int no;//结点编号 private String name;//结点名称 private TreeNode left;//左结点指针 private TreeNode right;//右结点指针 public TreeNode(int no, String name) { this.no = no; this.name = name; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public TreeNode getLeft() { return left; } public void setLeft(TreeNode left) { this.left = left; } public TreeNode getRight() { return right; } public void setRight(TreeNode right) { this.right = right; } @Override public String toString() { return "TreeNode{" + "no=" + no + ", name=‘" + name + ‘\‘‘ + ‘}‘; } //前序遍历 public void preOrder(){ //输出root结点 System.out.println(this); if (this.left != null){ this.left.preOrder();//递归左子结点 } if (this.right != null){ this.right.preOrder(); } } //中序遍历 public void midOrder(){ //先遍历左子树 if (this.left != null){ this.left.midOrder(); } //输出根结点 System.out.println(this); if (this.right != null){ this.right.midOrder(); } } //后续遍历 public void endOrder(){ if (this.left != null){ this.left.endOrder(); } if (this.right != null){ this.right.endOrder(); } //输出根结点 System.out.println(this); } }
满二叉树:
完全二叉树
原文:https://www.cnblogs.com/steakliu/p/11429443.html