《二叉树总结》

来源:互联网 发布:自动写小说软件 编辑:程序博客网 时间:2024/06/04 19:51

刚学过二叉树,感觉比链表简单一点,因为他的代码长度比较小。

一、首先写一个二叉树类,二叉树每一个节点都包含三部分,左指针leftNode、数据域data、右指针rightNode.类里有树结点的这三个属性和get 和 set 方法

二、再写一个类,可以对二叉树进行不同的遍历(先序遍历preOrder(),中序遍历centerOrder(),后序遍历endOrder()),并调试运行



/**

 *写一个二叉树类,定义二叉树属性

 */

public class TreeNodeDemo {
//设置树的属性
private Object value;
private TreeNodeDemo leftNode;
private TreeNodeDemo rightNode;

/**

*创建构造方法

* value--结点数据

* leftNode--结点左指针

* rightNode--结点右指针

*/
public TreeNodeDemo(Object value, TreeNodeDemo leftNode,
TreeNodeDemo rightNode) {
super();
this.value = value;
this.leftNode = leftNode;
this.rightNode = rightNode;
}

//-------------三种属性的get 、set 方法-------------------
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public TreeNodeDemo getLeftNode() {
return leftNode;
}
public void setLeftNode(TreeNodeDemo leftNode) {
this.leftNode = leftNode;
}
public TreeNodeDemo getRightNode() {
return rightNode;
}
public void setRightNode(TreeNodeDemo rightNode) {
this.rightNode = rightNode;
}
}




/**

 * 再写一个类,包含三种方法

 */

public class MyTree {
public int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
public LinkedList<TreeNodeDemo> list = new LinkedList<TreeNodeDemo>();

//创建二叉树
public void creatTree(){
for(int i=0;i<arr.length;i++){
TreeNodeDemo node = new TreeNodeDemo(arr[i],null,null);
list.add(node);
}
//创建父结点
for(int i=0;i<list.size()/2-1;i++){
list.get(i).setLeftNode(list.get(2*i+1));
list.get(i).setRightNode(list.get(2*i+2));
}
int lastNode = list.size()/2-1;
//创建父节点对象
TreeNodeDemo parentNode = list.get(lastNode);
parentNode.setLeftNode(list.get(2*lastNode+1));
if(list.size()%2 == 1){
parentNode.setRightNode(list.get(2*lastNode+2));
}
}
/**
* 二叉树的先序遍历
* @param root
*/
public void preOrder(TreeNodeDemo root){
if(root == null){
return ;
}

//先输出根节点
System.out.print(root.getValue()+",");
//先遍历左子树
preOrder(root.getLeftNode());
//后遍历右子树
preOrder(root.getRightNode());
}

/**
* 二叉树的中序遍历
* @param root
*/
public void centerOrder(TreeNodeDemo root){
if(root == null){
return ;
}
//先遍历左子树
centerOrder(root.getLeftNode());
System.out.print(root.getValue()+",");
//后遍历右子树
centerOrder(root.getRightNode());
}

/**
* 二叉树的后序遍历
* @param root
*/
public void endOrder(TreeNodeDemo root){
if(root == null){
return ;
}
//先遍历左子树
endOrder(root.getLeftNode());
//后遍历右子树
endOrder(root.getRightNode());
System.out.print(root.getValue()+",");
}
public static void main(String[] args) {
MyTree tree = new MyTree();
tree.creatTree();
tree.preOrder(tree.list.get(0));
tree.centerOrder(tree.list.get(0));
tree.endOrder(tree.list.get(0));
}
}

0 0
原创粉丝点击