前言
- 今天在力扣上看到这样一道题,感觉挺有趣,而后几经挫折解出来,结果和其他博主的有异同~
题目
- 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:给定二叉树: [3,9,20,null,null,15,7]
- 输出
- 摘自力扣102题
解题思路/知识点
- 层级遍历二叉树,一般借助队列作为缓冲。
- 头节点出队列,同时判断头节点是否含有左右子节点,如果有,则入队列。
- 如何判断层级?
本篇借助在队列里插入【干扰因子】的方式,即一个标识符来判断层级。
- 以此树来演示
- 步骤:null入队–>头节点入队(3)–>null出队->null入队尾->头节点出队(3)->头节点的左右节点入队(9/20)->null出队->null入队尾->9出队->20出队;
- 以上方法表示两个null之间是一个层级,如果还有模糊,不急,showCode。
showCode
创建节点对象
public class TreeNode {
int value;
TreeNode lNode;
TreeNode rNode;
public void setValue(int value) {
this.value = value;
}
public void setlNode(TreeNode lNode){
this.lNode = lNode;
}
public void setrNode(TreeNode rNode){
this.rNode = rNode;
}
public void frontShow() {
System.out.println(value);
if(lNode!=null){
lNode.frontShow();
}
if(rNode!=null){
rNode.frontShow();
}
}
}
创建树对象
public class BinaryTree {
TreeNode root;
public void setRoot(TreeNode root) {
this.root = root;
}
public void frontShow(){
this.root.frontShow();
}
}
创建测试类
public class Solution {
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
BinaryTree tree = new BinaryTree();
public static void main(String[] args) {
}
}
public void createBinaryTree(int index,TreeNode node) {
if(index == 0) {
tree.setRoot(treeNodes