概述
好久没敲代码,想来还是回过头看看基础点的回归感觉。
二叉树是个基础数据结构,很难说直接在某个真实业务场景直接应用,很多基础数据结构都不可能直接搬到实际业务场景中使用,基础数据结构与其思想都是中级或高级数据结构的基础和构造过程,如同氢、氧元素构造成水,才直接提供给生物饮用。
文章目录
- 二叉树遍历
- 发散
二叉树遍历
遍历的实际内容与代码实现如下。思想很简单,除了口诀式的记住遍历方案,还需主动去理解抽象过程,最重要的还是应用场景。
package com.mym.tree;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
/**
* 二叉树的遍历
* 深度遍历:
* 前序遍历(根左右)
* 中序遍历(左根右)
* 后序遍历(左右根)
*
* 广度遍历:
* 层序遍历
*/
public class BinaryTree {
/**
* 二叉树节点定义
*/
private static class TreeNode{
int data;
TreeNode leftChild;
TreeNode rightChild;
public TreeNode(int data) {
this.data = data;
}
}
/**
* 从集合构建二叉树
* @param list 集合
* @return tree
*/
public static TreeNode createBinaryTree(LinkedList<Integer> list){
TreeNode node = null;
if ((list == null || list.isEmpty())) {
return null;
}
Integer data = list.removeFirst();
if (data != null) {
node = new TreeNode(data);
node.leftChild = createBinaryTree(list);
node.rightChild = createBinaryTree(list);
}
return node;
}
/**
* 前序遍历
* @param node tree
*/
public static void preOrderTraveral(TreeNode node){
if (node == null) {
return;
}
System.out.print(node.data);
preOrderTraveral(node.leftChild);
preOrderTraveral(node.rightChild);
}
/**
* 中序遍历
* @param node tree
*/
public static void mediumOrderTraveral(TreeNode node){
if (node == null) {
return;
}
mediumOrderTraveral(node.leftChild);
System.out.print(node.data);
mediumOrderTraveral(node.rightChild);
}
/**
* 后序遍历
* @param node tree
*/
public static void postOrderTraveral(TreeNode node){
if (node == null) {
return;
}
postOrderTraveral(node.leftChild);
postOrderTraveral(node.rightChild);
System.out.print(node.data);
}
/**
* 层序遍历
* @param node tree
*/
public static void levelOrderTraveral(TreeNode node){
if (node == null) {
return;
}
// 使用队列(先进先出)辅助遍历。递归处理麻烦
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(node);
while (!queue.isEmpty()) {
TreeNode poll = queue.poll();
System.out.print(poll.data);
if (poll.leftChild != null) {
queue.offer(poll.leftChild);
}
if (poll.rightChild != null) {
queue.offer(poll.rightChild);
}
}
}
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4}));
TreeNode binaryTree = createBinaryTree(list);
System.out.println("前序遍历: ");
preOrderTraveral(binaryTree);
System.out.println("中序遍历: ");
mediumOrderTraveral(binaryTree);
System.out.println("后序遍历: ");
postOrderTraveral(binaryTree);
System.out.println("层序遍历: ");
levelOrderTraveral(binaryTree);
}
}
发散
- 遍历,就是为了一一“检查”元素,那么很容易想到应用场景就是:查找。故而,二叉树在查找、搜索领域衍生触很多高级数据结构,并且广泛使用。如AVL、红黑数、B+、B-等等等
- 遍历的方案有很多,如果是做学者去研究或者去发散思维,那Ok,尽情的去研究吧。若目的纯正,就是为了快速优质的实现,那大可参照如上方案。自然界多彩多样,也正因为如此人才那么多难以抉择的选择面临,有些不必要的选择,直接无视,多简单。
最后
以上就是震动长颈鹿为你收集整理的数据结构与算法:二叉树遍历二叉树遍历发散的全部内容,希望文章能够帮你解决数据结构与算法:二叉树遍历二叉树遍历发散所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复