您的位置:首页 > 职场人生

【面试】基于二叉树层次遍历相关问题的求解

2016-02-23 21:06 363 查看
一、问题描述

  1.遍历二叉树指定层次的所有结点

  2.统计指定层的搜索结点个数

  3.对二叉树进行层次遍历

  4.找到二叉树中每一层的第一个结点或最后一个结点

二、问题分析

  对树结构的问题我们首先会想到使用递归来解决,因为树结构完美适合递归,树的前序、中序、后序遍历使用递归很容易就可以解决,并且很容易理解。对于树结构的层次遍历则会稍微麻烦一点(当然,也很简单),基于层次遍历的问题也有很多,现在我们就着重来分析前面提到的3个问题。

  什么是层次遍历 -- 即按照节点在每一层的顺序从上至下,由左到右进行遍历。

  所有的结果都是基于如下的树结构:

  

public static void printFirstNodeOfEachLevel(Node root) {
Queue<Node> queue = new LinkedList<Node>();
int preCount = 0;
int levelNodeCount = 0;
if (null != root) {
System.out.println(root.data);
if (null != root.lChild) {
queue.offer(root.lChild);
levelNodeCount++;
}
if (null != root.rChild) {
queue.offer(root.rChild);
levelNodeCount++;
}
int count = 0;
preCount = levelNodeCount;
levelNodeCount = 0;
while (!queue.isEmpty()) {
Node node = queue.poll();
count++;
if (count == 1) {
System.out.println(node.data);
}

if (null != node.lChild) {
queue.offer(node.lChild);
levelNodeCount++;
}
if (null != node.rChild) {
queue.offer(node.rChild);
levelNodeCount++;
}

if (count == preCount) { // 已经到了本层的最后一个结点
count = 0;
preCount = levelNodeCount;
levelNodeCount = 0;
}
}
}
}


View Code
  同理,若理解了遍历每层的第一个结点的思路,那么遍历每层的最后一个结点就很简单了。只需要令count == preCount即可。

三、问题总结

  对于树结构的相关问题我们首先应该想到的是使用递归来解决,然后思考能不能使用其他方法来解决。感谢各位园友观看,谢谢~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: