您的当前位置:首页正文

二叉树(Binary Tree)

来源:花图问答

二叉树(Binary Tree )是一种常见的数据结构,在游戏常作为判定树,对AI行为进行控制,如:在当战斗时攻击OR 防御,攻击时,普通攻击OR魔法攻击等等。

二叉树的定义与结构特点,在此就不作说明。

二叉树的一些特性:

1.第i层最多有2^(i-1)个节点(i >=1);

2.深度为h的二叉树最多有2^h - 1个节点;

3.对于任何一棵二叉树T,如果叶子结点数为N,度为2的结点数为M,则N=M+1;

4.具有n个结点的完全二叉树深度为[㏒<sub>2</sub>n]

二叉树的Java实现:

package com.whs.datastruct;

import java.util.Scanner;

/**

* 二叉树

*

*@author wuhaishengxxx

*

*/

public class BinaryTree {

static Scanners canner=new Scanner(System.in);

// 创建

static class Node {

String value;

Node parent;

Node left;

Node right;

}

// 注意: Java 是值传递,因此在此通过返回值去重新赋值

public static Node createTree(Node tree) {

System.out.println("请输入结点值:");

String s =scanner.nextLine();

if(!"null".equalsIgnoreCase(s)) {

tree=new Node();

tree.value=s;

tree.left= createTree(tree.left);

if(tree.left!=null) {

tree.left.parent=tree;

}

System.out.println(s+" left end");

tree.right= createTree(tree.right);

if(tree.right!=null) {

tree.right.parent=tree;

}

System.out.println(s+" right end");

return tree;

}else{

return null;

}

}

// 先遍历

public static void preOrderTree(Node tree) {

if(tree!=null) {

showTree(tree);

preOrderTree(tree.left);

preOrderTree(tree.right);

}

}

// 用于输出显示

public static void showTree(Node tree) {

if(tree!=null) {

System.out.print("Node:"+tree.value+" ");

System.out.print("{");

if(tree.left!=null) {

System.out.print(" left: "+tree.left.value);

}

if(tree.right!=null) {

System.out.print(" right: "+tree.right.value);

}

System.out.println("}");

}

}

// 中序遍历

publicstaticvoidinOrderTree(Nodetree) {

if(tree!=null) {

inOrderTree(tree.left);

showTree(tree);

inOrderTree(tree.right);

}

}

// 后序遍历

public static void postOrderTree(Node tree) {

if(tree!=null) {

postOrderTree(tree.left);

postOrderTree(tree.right);

showTree(tree);

}

}

// 层次遍历

public static void levelOrderTree(Node tree) {

if(tree!=null) {

if(tree.parent==null) {

showTree(tree);

}

showTree(tree.left);

showTree(tree.right);

levelOrderTree(tree.left);

levelOrderTree(tree.right);

}

}

public static void main(String[] args) {

Node root=null;

root= createTree(root);

System.out.println("先序遍历:");

preOrderTree(root);

System.out.println("中序遍历:");

inOrderTree(root);

System.out.println("后序遍历:");

postOrderTree(root);

System.out.println("层次遍历:");

levelOrderTree(root);

}

}