您的位置:首页 > 编程语言

简单编程题目连载(三)

2017-01-13 16:59 204 查看
二叉树中如何获取二叉树的层数?

注意这里获取的层数是从1开始算的,不是从0开始的。

直接上代码:

public class Node{
public int value;
public Node left;
public Node right;
public Node(int data){
this.value = data;
}
}
public void getHeight(Node h,int i){
if(h == null){
return i;
}
return Math.max(getHeight(h.left,i+1),getHeight(h.right,i+1));
}


举个例子:

public class Test{
public static void main(String[] args){
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
Node node7 = new Node(7);
Node node8 = new Node(8);
Node node9 = new Node(9);
Node node10 = new Node(10);
Node node11 = new Node(11);
Node node12 = new Node(12);
Node node13 = new Node(13);
Node node14 = new Node(14);
Node node15 = new Node(15);
Node node16 = new Node(16);
node1.left = node2;
node1.right = node3;
node2.right = node4;
node4.left = node7;
node4.right = node8;
node8.right = node11;
node11.left = node13;
node11.right = node14;
node3.left = node5;
node3.right = node6;
node5.left = node9;
node5.right = node10;
node9.left = node12;
node12.left = node15;
node12.right = node16;
int height = getHeight(node1,0);
}
}


上边的二叉树返回的高度为6。

如果获取二叉树每一层上最左和最右节点?

依然以上边的二叉树为例子

创建一个二维的Node类型的数组来存每层最左和最右的节点

Node[][] edgeMap = new Node[height][2];

数组的大小由二叉树的层数来定

然后利用下方的函数即可得到每层的最左和最右节点。

public void setEdgeMap(Node h,int i,Node[][] edgeMap){
if(h == null){
return;
}
edgeMap[i][0] = edgeMap[i][0] == null ? h : edgeMap[i][0];
edgeMap[i][1] = h;
setEdgeMap(h.left,i+1,edgeMap);
setEdgeMap(h.right,i+1,edgeMap);
}


这个函数做了一件什么事呢?

二维数组的0位置作为左边,1位置作为右边。

i相当于到达的层数,每到一层,遇到的第一个左节点即为当前层的最左节点,因为该遍历是一直向左延伸的。右节点只要遇到新值就更新。然后递归遍历到每一层。递归基为遇到的节点为空,就返回。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 二叉树