package com.demo.calculate; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import com.demo.calculate.bean.BinaryTree; import com.demo.calculate.bean.TreeNode; public class TreeActivit extends Activity { private BinaryTree binaryTree; @Override protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tree); //创建一棵空树 binaryTree = new BinaryTree(); TreeNode root = new TreeNode(1); binaryTree.setRoot(root); //根节点的左节点 TreeNode leftNode = new TreeNode(2); leftNode.setNodeLeft(new TreeNode(4)); leftNode.setNodeRight(new TreeNode(5)); //根节点的右节点 TreeNode rightNode = new TreeNode(3); rightNode.setNodeLeft(new TreeNode(6)); rightNode.setNodeRight(new TreeNode(7)); root.setNodeLeft(leftNode); root.setNodeRight(rightNode); findViewById(R.id.btn_frontShow).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //前序遍历 frontShow(); } }); findViewById(R.id.btn_midShow).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //中序遍历 midShow(); } }); findViewById(R.id.btn_afterShow).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //后序遍历 afterShow(); } }); findViewById(R.id.btn_frontSearch).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //前序查找 TreeNode result = frontSearch(5); Log.i("tag",result.getValue()+"============="); } }); findViewById(R.id.btn_deleteNode).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //删除节点 deleteNode(7); frontShow(); } }); } private void deleteNode(int i) { binaryTree.deleteNode(i); } //前序查找 private TreeNode frontSearch(int i) { return binaryTree.frontSearch(i); } private void afterShow() { binaryTree.afterShow(); } private void midShow() { binaryTree.midShow(); } //前序遍历 private void frontShow() { binaryTree.frontShow(); } }
package com.demo.calculate.bean; public class BinaryTree { private int value; private TreeNode root; public int getValue() { return value; } public void setValue(int value) { this.value = value; } public TreeNode getRoot() { return root; } public void setRoot(TreeNode root) { this.root = root; } public void frontShow() { if (root!=null){ root.frontShow(); } } public void midShow() { if (root!=null){ root.midShow(); } } public void afterShow() { if (root!=null){ root.afterShow(); } } public TreeNode frontSearch(int i) { if (root!=null){ return root.frontSearch(i); } return null; } public void deleteNode(int i) { if (root!=null){ root.deleteNode(i); } } }
package com.demo.calculate.bean; import android.util.Log; public class TreeNode { private int value; private TreeNode nodeLeft; private TreeNode nodeRight; public void setNodeLeft(TreeNode nodeLeft) { this.nodeLeft = nodeLeft; } public void setNodeRight(TreeNode nodeRight) { this.nodeRight = nodeRight; } public TreeNode(int value) { this.value = value; } public void frontShow() { Log.i("tag",value+""); if (nodeLeft!=null){ nodeLeft.frontShow(); } if (nodeRight!=null){ nodeRight.frontShow(); } } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public void midShow() { if (nodeLeft!=null){ nodeLeft.midShow(); } Log.i("tag",value+""); if (nodeRight!=null){ nodeRight.midShow(); } } public void afterShow() { if (nodeLeft!=null){ nodeLeft.afterShow(); } if (nodeRight!=null){ nodeRight.afterShow(); } Log.i("tag",value+""); } //前序查找 public TreeNode frontSearch(int i) { TreeNode target=null; if (this.value ==i){ return this; }else{ if (nodeLeft!=null){ target = nodeLeft.frontSearch(i); } if (target!=null){ return target; } if (nodeRight!=null){ target = nodeRight.frontSearch(i); } } return target; } public void deleteNode(int i) { TreeNode parent = this; if (this.value==i){ parent = null; } //判断左儿子 if (parent!=null && parent.nodeLeft!=null && parent.nodeLeft.value==i){ parent.nodeLeft = null; return; } //判断右儿子 if (parent!=null && parent.nodeRight!=null && parent.nodeRight.value==i){ parent.nodeRight = null; return; } //递归删除左面的儿子 parent = nodeLeft; if (parent!=null){ parent.deleteNode(i); } //递归删除右面的儿子 parent = nodeRight; if (parent!=null){ parent.deleteNode(i); } } }