求已知二叉树的面积

来源:互联网 发布:papi酱人气下滑 知乎 编辑:程序博客网 时间:2024/05/16 07:22

求已知二叉树的面积。

宽度为二叉树每层中最大节点个数最大值

高度为树的最大深度

面积=高度*宽度。

package xiaokai.dataStruct;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class BiTree {private BiTreeNode root;private int CountPerLevel[] = new int [10];private int MaxLevel = 0;private int MaxWidth = 0;public int getMaxWidth() {getWidth(root,0);return MaxWidth;}public void setMaxWidth(int maxWidth) {MaxWidth = maxWidth;}public int getMaxLevel() {getWidth(root,0);return MaxLevel;}public void setMaxLevel(int maxLevel) {MaxLevel = maxLevel;}public BiTree(){this.root = new BiTreeNode(0);}public BiTree(BiTreeNode node){if(node == null){this.root = new BiTreeNode(0);}this.root = node;}public BiTreeNode getRoot() {return root;}public void setRoot(BiTreeNode root) {this.root = root;}public void setChild (BiTreeNode target,BiTreeNode left,BiTreeNode right){target.setlNode(left);target.setrNode(right);}/** * 前序遍历 * @param node */public void preOrder(BiTreeNode node){if(node == null) {return ;}System.err.print(node.getValue()+",");preOrder(node.getlNode());preOrder(node.getrNode());}/** * 中序遍历 * @param node */public void middleOrder(BiTreeNode node){if(node == null) {return ;}middleOrder(node.getlNode());System.err.print(node.getValue()+",");middleOrder(node.getrNode());}/** * 后序遍历 * @param node */public void postOrder(BiTreeNode node){if(node == null) {return ;}postOrder(node.getlNode());postOrder(node.getrNode());System.err.print(node.getValue()+",");}/** * 非递归的前序遍历 * @param node */public void prePrint(BiTreeNode node){Stack<BiTreeNode> stack = new Stack<BiTreeNode>();while(node != null||!stack.isEmpty()){while(node != null){System.err.print(node.getValue());stack.push(node);node = node.getlNode();}if(!stack.isEmpty()){node = stack.pop();node = node.getrNode();//System.err.println(node.getValue());}}}/** * 层序遍历 * @param node */public void levelPrint(BiTreeNode node){Queue<BiTreeNode> queue = new LinkedList<BiTreeNode>();while(node!=null){//System.err.println(node.getValue());if(node.getlNode() != null){queue.offer(node.getlNode());}if(node.getrNode() != null){queue.offer(node.getrNode());}System.err.print(node.getValue());node = queue.poll();}}/** * 递归获取树的宽度与高度,分别保存在MaxLevel与MaxWidth中 * @param node * @param currentLevel */public void getWidth(BiTreeNode node,int currentLevel){if(node == null){return;}currentLevel ++;if(currentLevel>MaxLevel){MaxLevel = currentLevel;}CountPerLevel[currentLevel-1] += 1;if(CountPerLevel[currentLevel-1]>MaxWidth){MaxWidth = CountPerLevel[currentLevel-1];}if(node.getlNode()!=null){getWidth(node.getlNode(),currentLevel);}if(node.getrNode()!=null){getWidth(node.getrNode(),currentLevel);}}/** * 测试函数入口 * @param args */public static void main(String [] args){BiTreeNode btn = new BiTreeNode(1);BiTree bt= new BiTree(btn);bt.getRoot().setlNode(new BiTreeNode(2));bt.getRoot().setrNode(new BiTreeNode(3));bt.getRoot().getlNode().setlNode(new BiTreeNode(4));bt.getRoot().getlNode().setrNode(new BiTreeNode(5));bt.getRoot().getrNode().setlNode(new BiTreeNode(6));bt.getRoot().getrNode().setrNode(new BiTreeNode(7));bt.getRoot().getrNode().getlNode().setrNode(new BiTreeNode(8));bt.preOrder(bt.getRoot());System.err.println();bt.middleOrder(bt.getRoot());System.err.println();bt.postOrder(bt.getRoot());System.err.println();bt.levelPrint(bt.getRoot());System.err.println();System.err.println("最大宽度为:"+bt.getMaxWidth());System.err.println("最高宽度为:"+bt.getMaxLevel());}}
定义节点类BiNode

package xiaokai.dataStruct;public class BiTreeNode {private int value;private BiTreeNode lNode;private BiTreeNode rNode;public BiTreeNode(int value){this.value = value;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public BiTreeNode getlNode() {return lNode;}public void setlNode(BiTreeNode lNode) {this.lNode = lNode;}public BiTreeNode getrNode() {return rNode;}public void setrNode(BiTreeNode rNode) {this.rNode = rNode;}}



原创粉丝点击