笔者初学者遇到的问题:内部类调用,以及一个类如何调用另外一个类的成员变量(忘了,通过设置get,set等),
重点是掌握二叉树的创建,明确知道原理和过程。
/**
* @program: entrance_exam
* @description: 求二叉树的节点的个数
* @author: TAO
* @create: 2018-05-23 09:47
**/
import java.util.LinkedList;
import java.util.List;
/**算法思想:基于后序遍历的思想遍历,若非空节点,则计数++,否则继续遍历
* 若根节点为空,那么返回为0.
* */
class BinaryTree{
private int []arr={1,2,3,4,5,6,7,8,9};//定义初始数组,插入到二叉树中
private List<Node> nodeList=null;
private int count=0;
//内部类:定义节点
class Node{
int data;
Node lchild;
Node rchild;
Node(int data){
lchild=null;
rchild=null;
this.data=data;
}
}
public void createBinTree(){
nodeList=new LinkedList<>();
for(int i=0;i<arr.length;i++)
nodeList.add(new Node(arr[i]));//将数组中的每一个值转换为节点
for (int parentIndex = 0; parentIndex < arr.length / 2 - 1; parentIndex++) {
// 左孩子
nodeList.get(parentIndex).lchild = nodeList.get(parentIndex * 2 + 1);
// 右孩子
nodeList.get(parentIndex).rchild = nodeList.get(parentIndex * 2 + 2);
}
// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理
int lastParentIndex = arr.length / 2 - 1;
// 左孩子
nodeList.get(lastParentIndex).lchild = nodeList.get(lastParentIndex * 2 + 1);
// 右孩子,如果数组的长度为奇数才建立右孩子
if (arr.length % 2 == 1) {
nodeList.get(lastParentIndex).rchild = nodeList.get(lastParentIndex * 2 + 2);
}
}
public void postOrderTraverse(Node node) {
if (node == null)
return ;
postOrderTraverse(node.lchild);
postOrderTraverse(node.rchild);
System.out.printf("%3d",node.data);
count++;
}
public List<Node> getNodeList() {
return nodeList;
}
public int getCount() {
return count;
}
}
public class Entrance7 {
public static void main(String[] args) {
BinaryTree binaryTree=new BinaryTree();
binaryTree.createBinTree();
BinaryTree.Node root=binaryTree.getNodeList().get(0);
binaryTree.postOrderTraverse(root);
System.out.println();
System.out.println(binaryTree.getCount());
}
}