二叉树构造类:
public class BinaryTree { int data; // 根节点数据 BinaryTree left; // 左子树 BinaryTree right; // 右子树 public BinaryTree(int data) // 实例化二叉树类 { this.data = data; left = null; right = null; } public void insert(BinaryTree root, int data) { // 向二叉树中插入子节点 if (data > root.data) // 二叉树的左节点都比根节点小 { if (root.right == null) { root.right = new BinaryTree(data); } else { this.insert(root.right, data); } } else { // 二叉树的右节点都比根节点大 if (root.left == null) { root.left = new BinaryTree(data); } else { this.insert(root.left, data); } } } }
二叉树遍历、深度及求和:
public class BinaryTreePreorder { private static StringBuffer current = new StringBuffer(); private static int sum = 0; private static int needSum = 178; public static void preOrder(BinaryTree root) { //前序遍历(递归) if (root != null) { System.out.print(root.data + "-"); preOrder(root.left); preOrder(root.right); } } public static void inOrder(BinaryTree root) { // 中序遍历 if (root != null) { inOrder(root.left); System.out.print(root.data + "--"); inOrder(root.right); } } public static void postOrder(BinaryTree root) { // 后序遍历 if (root != null) { postOrder(root.left); postOrder(root.right); System.out.print(root.data + "---"); } } public static int getDepth(BinaryTree node) { //深度 if (node == null) { return 0; } int leftDepth = 0; int rightDepth = 0; leftDepth = getDepth(node.left); rightDepth = getDepth(node.right); return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1; } public static void visit(BinaryTree p) { System.out.print(p.data + " "); } protected static void iterativePreorder(BinaryTree p) { //前序遍历(非递归) Stack<BinaryTree> stack = new Stack<BinaryTree>(); if (p != null) { stack.push(p); while (!stack.empty()) { p = stack.pop(); visit(p); if (p.right != null) stack.push(p.right); if (p.left != null) stack.push(p.left); } } } private static void sum(BinaryTree node){ //计算二叉树节点总和数为N的集合,这里N = 178 int val = node.data; current.append(val+","); if(node.left==null && node.right==null){ //leaf here sum = 0; String[] nums = current.toString().split(","); for (int i=0;i<nums.length;i++) { sum += Integer.parseInt(nums[i]); } if (sum == needSum) { for (int i=0;i<nums.length;i++) { System.out.print(nums[i]+"-"); } } } else{ if(node.left!=null){ sum(node.left); current.setLength(current.length()-(node.left.data+"").length()-1); } if(node.right!=null){ sum(node.right); current.setLength(current.length()-(node.right.data+"").length()-1); } } } public static void main(String[] str) { int[] array = { 12, 76, 35, 22, 16, 48, 90, 46, 9, 40 }; BinaryTree root = new BinaryTree(array[0]); // 创建二叉树 for (int i = 1; i < array.length; i++) { root.insert(root, array[i]); // 向二叉树中插入数据 } System.out.println("(递归)前序遍历:"); preOrder(root); System.out.println(); System.out.println("(非递归)前序遍历:"); iterativePreorder(root); System.out.println(); System.out.println("中序遍历:"); inOrder(root); System.out.println(); System.out.println("后序遍历:"); postOrder(root); System.out.println(); System.out.println("深度:"); System.out.println( getDepth(root)); System.out.println("遍历求和,取总和为178的序列:"); sum(root); } }
二叉树图形:
相关推荐
内容概要:本文档详细介绍了多个常见的 Java 编程问题及其解决方案,涵盖栈实现队列、二叉树层序遍历、异或运算的应用、双指针法求和、计数排序、汉明距离计算、全排列、字符串反转和拓扑排序等多个经典算法。...
在IT领域,特别是数据结构和算法的学习中,二叉树是一种重要的抽象数据类型。满二叉树是一种特殊的二叉树,其中每一层都是完全填充的,除了可能的最后一层,且最后一层的所有节点都尽可能地向左靠拢。而将满二叉树...
本文将重点介绍三种数据结构相关的算法:哈弗曼编码、二叉树遍历以及矩阵乘法,并结合C语言的具体实现方式进行探讨。 首先,让我们从哈弗曼编码开始。哈弗曼编码是一种广泛应用于数据压缩领域的算法,它能够有效地...
深度优先搜索篇:介绍了二叉树的深度优先搜索(DFS)算法,包括前序遍历、中序遍历、后序遍历和路径求和等问题的解法。 广度优先搜索篇:介绍了二叉树的广度优先搜索(BFS)算法,包括层次遍历、锯齿形遍历和最小...
leetcode 338 个人博客: 坚持每天更新一至两篇。...二叉树中序遍历 Easy 二叉树是否相等 Easy 二叉树最大深度 Easy 二叉树层序遍历 Easy 二叉树是否平衡 Easy 二叉树的最小深度 Easy 二叉树路径和 Easy Pascal三角求和
接着,B题“求二叉树中是否存在与给定值相等的路径”,这个题目要求学生掌握二叉树的遍历算法,并能够利用前序遍历顺序输入的节点值构造出完整的二叉树结构。学生需要编程实现对二叉树的深度优先搜索(DFS),来寻找...
【描述】:"目录经典算法Manacher算法原始问题进阶问题BFPRT算法morris遍历二叉树遍历规则先序、中序序列后序序列时间复杂度分析求和为aim的最长子数组长度" 在算法面试中,掌握基础和进阶算法是至关重要的。本篇...
《数据结构》实验报告主要探讨了二叉树的相关操作,包括二叉树的遍历算法以及如何计算二叉树的一些基本属性。以下是该实验报告涉及的主要知识点: 1. **二叉树遍历**: - **递归遍历**: - **先序遍历**:根 -> ...
《从算法到数据结构》是一份全面的算法和数据结构学习资料汇总,它不仅覆盖了算法的基本概念和常见数据结构的设计原理,还包含了大量实用的编程实例及面试题目解答。这份资源由GitHub用户sherxon维护,其项目地址为...
Java算法是计算机科学中的核心部分,对于任何Java开发者来说,理解和掌握算法都是非常重要的。这本电子书涵盖了Java语言实现的各种算法,旨在帮助读者提升编程能力,优化问题解决策略,并为面试准备提供宝贵资源。 ...
对于两个n×n的矩阵A和B,它们的乘积C是通过将A的每一行与B的每一列对应元素相乘然后求和得到的。如果存在更多的矩阵,例如C和D,我们先计算AB,再用结果乘以D。这个过程的计算量随着矩阵的数量增加而增加,因此优化...
题目二是要求遍历二叉树并求和所有值大于0的节点,可采用递归或迭代的方式完成。 总的来说,这份试题全面考察了数据结构与算法的基础知识,包括理论和实践两方面,对考生的理解和应用能力有着较高的要求。
二叉树是一种重要的数据结构,它在计算机科学中扮演着至关重要的角色,特别是在算法和数据存储方面。在“Second-BiTree.rar”压缩包中,包含的“Second-BiTree.cpp”文件很可能是实现二叉树操作的一个C++源代码程序...
以上17个基本操作涵盖了二叉树的主要功能,掌握它们对于理解和实现二叉树算法至关重要。通过C语言编程,我们可以有效地利用递归和非递归策略来实现这些操作。在实际项目中,理解这些基本概念和算法能够帮助开发者...
Java算法大全是一个集合了近百种算法的资源包,主要针对Java编程语言,旨在帮助开发者提升在算法设计和实现上的能力。这个压缩包包含了各种类型的算法,涵盖了基础算法到复杂的数据结构处理,对于学习和理解算法有着...
而二叉树部分则涉及节点计数、求和、高度计算、层次遍历、叶子节点处理等多个方面。每种算法都提供了详细的伪代码实现,帮助读者深入理解各种数据结构的基本特性和常用操作方法。 适合人群:对数据结构有一定了解并...
leetcode买卖股票问题力码 由 Java 实现的 LeetCode。...二叉树的最小深度 路径和 路径求和 II 将二叉树展平到链表 在每个节点中填充下一个右指针 II 二叉树最大路径和 根到叶数求和 按算法 动态规划
这些知识点涵盖了数据结构中的基本概念,如数组存储策略、栈的操作、二叉树的构造和遍历、图的深度优先搜索以及最小生成树的构造,这些都是在计算机科学,特别是数据结构与算法领域中必须掌握的基础知识。...
计算Huffman树的WPL时,需遍历所有叶子节点,计算其路径长度并乘以其权重,最后求和得到WPL值。 ### 3. 数组排序 给出一组数字,要求找出正确的排序结果。排序是数据结构中的基本操作之一,常见的排序算法包括冒泡...
58. 二叉树的下一个节点:涉及二叉树遍历算法以及节点关系的确定。 59. 对称的二叉树:涉及树结构的对称性判断。 60. 按之字形顺序打印二叉树:涉及二叉树的层序遍历以及队列操作。 61. 把二叉树打印成多行:涉及...