当前位置: 首页 > news >正文

数据结构---二叉树

二叉树的举例

遍历

广度优先遍历

广度优先遍历(Breadth-first-order):尽可能先访问距离根最近的节点,也称为层序遍历

练习
leetCode102
思路
/*1/   \2     3/   \  /  \4    5 6    7头[]尾1 2 3 4 5 6 7
*/
实现
public class E01Leetcode102 {public static void main(String[] args) {TreeNode root = new TreeNode(new TreeNode(new TreeNode(4),2,new TreeNode(5)),1,new TreeNode(new TreeNode(6),3,new TreeNode(7)));
​System.out.println(testMethod(root));Queue<TreeNode> queue = new LinkedList<>();}public static List<List<TreeNode>> testMethod(TreeNode root){if(root == null){return null;}List<List<TreeNode>> list = new ArrayList<>();LinkedListQueue<TreeNode> queue = new LinkedListQueue();queue.offer(root);int index = 1;while (!queue.isEmpty()){int temp = 0;List<TreeNode> leve = new ArrayList<>();for(int i = 0; i < index; i++){TreeNode n = queue.poll();leve.add(n);if(n.left != null){queue.offer(n.left);temp++;}if(n.right != null){queue.offer(n.right);temp++;}}index = temp;list.add(leve);}return list;}
}
深度优先遍历

规则

1.深度优先遍历(Depth-first order):对于二叉树,可以进一步分成三种(要深入到叶子节点)

前序遍历:先访问该节点,然后是左子树,最后是右子树

中序遍历:先访问左子树,然后是该节点,最后是右子树

后序遍历:先访问左子树,然后是右子树,最后是该节点

实现

前序遍历

LinkedList<TreeNode> list = new LinkedList();
TreeNode curr = root;
​
while(curr != null || !list.isEmpty){if(curr != null){System.out.println(curr.val);list.push(curr);curr = curr.left;}else{TreeNode pop = list.pop();curr = pop.left}
}

中序遍历

LinkedList<TreeNode> list = new LinkedList();
TreeNode curr = root;
​
while(curr != null || !list.isEmpty){if(curr != null){list.push(curr);curr = curr.left;}else{TreeNode pop = list.pop();curr = pop.leftSystem.out.println(pop.val);}
}

后续遍历

    static void preOrderEst2(TreeNode node){TreeNode curr = node;LinkedList<TreeNode> list = new LinkedList<>();TreeNode pop = null;while(curr != null || !list.isEmpty()){if(curr != null){list.push(curr);curr = curr.left;}else{TreeNode peek = list.peek();if(peek.right == null || pop == peek.right){pop = list.pop();System.out.println("回" + pop.val);}else {curr = peek.right;}}}}

同时解决所有深度优先遍历

    static void preOrderEst3(TreeNode node){TreeNode curr = node;LinkedList<TreeNode> list = new LinkedList<>();TreeNode pop = null;while(curr != null || !list.isEmpty()){//待处理的左子树if(curr != null){list.push(curr);System.out.println("前" + curr.val);curr = curr.left;}else{//右子树为空的时候TreeNode peek = list.peek();if(peek.right == null){System.out.println("中" + peek.val);pop = list.pop();System.out.println("后" + pop.val);//右子树处理完毕}else if(pop == peek.right){pop = list.pop();System.out.println("后" + pop.val);// 待处理的右子树}else{System.out.println("中" + peek.val);curr = peek.right;}}}}

相关文章:

  • 使用Spring Boot和Spring Security结合JWT实现安全的RESTful API
  • kafka之操作示例
  • Web安全技术体系
  • 09 接口自动化-用例管理框架pytest之allure报告定制以及数据驱动
  • 【概率论基本概念01】点估计
  • github好玩的工具
  • GitHub 趋势日报 (2025年05月23日)
  • 39-居住证管理系统(小程序)
  • 2025年第八届广西大学生程序设计大赛(热身赛)题解
  • jmeter中文乱码问题
  • x64_ubuntu22.04.5安装:cuda driver + cuda toolkit
  • JavaSE核心知识点03高级特性03-03(IO流)
  • 人工智能在医疗影像诊断上的最新成果:更精准地识别疾病
  • Oracle表索引变为不可用状态了怎么办
  • 【C/C++】红黑树学习笔记
  • python:机器学习概述
  • AI 理论- 模型优化 - 注意力机制
  • 台式机安装新的固态硬盘后无显示
  • OpenLayers 加载测量控件
  • 第七章:组件之城 · 重构世界的拼图术
  • 做网站做一个什么主题的/沈阳企业网站seo公司
  • b2b网站的主要功能/网站seo设置是什么意思
  • 做公司网站的企业/百度推广深圳分公司
  • 附近学电脑在哪里报名/重庆seo公司
  • 网页登录qq入口/网络优化工作应该怎么做
  • 电子商务网站建设试卷及答案/网站建设制作流程