二叉树构造类:
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); } }
二叉树图形:
相关推荐
在IT领域,特别是数据结构和算法的学习中,二叉树是一种重要的抽象数据类型。满二叉树是一种特殊的二叉树,其中每一层都是完全填充的,除了可能的最后一层,且最后一层的所有节点都尽可能地向左靠拢。而将满二叉树...
深度优先搜索篇:介绍了二叉树的深度优先搜索(DFS)算法,包括前序遍历、中序遍历、后序遍历和路径求和等问题的解法。 广度优先搜索篇:介绍了二叉树的广度优先搜索(BFS)算法,包括层次遍历、锯齿形遍历和最小...
leetcode 338 个人博客: 坚持每天更新一至两篇。...二叉树中序遍历 Easy 二叉树是否相等 Easy 二叉树最大深度 Easy 二叉树层序遍历 Easy 二叉树是否平衡 Easy 二叉树的最小深度 Easy 二叉树路径和 Easy Pascal三角求和
【描述】:"目录经典算法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. 把二叉树打印成多行:涉及...
- **NC5二叉树根节点到叶子节点的路径和**:深度优先搜索遍历,记录路径。 - **BM29二叉树中和为某一值的路径**:递归方法,左右子树分别求和,如果路径和等于目标值,则返回true。 - **NC8二叉树中和为某一值的...
二叉树的遍历是算法中的重要部分,通常包括前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。此外,线索化二叉树是一种特殊形式的二叉树,通过额外的线索指针使得中序遍历可以在O(1)时间内完成。...
树相关的算法题很多,如重建二叉树、判断二叉树是否为BST(二叉搜索树)、按层遍历二叉树等。二叉树的遍历分为前序、中序、后序,以及层次遍历。对于二叉搜索树,有特定的遍历顺序,如中序遍历得到的结果是有序的。 ...
2. 深度为k的二叉树最多有2^k-1个节点,这是等比级数求和的结果。 3. 二叉树中,叶节点的数量n0、度为2的非叶节点数量n2和总的节点数n满足公式n = n0 + n2 + 1,这是著名的卡特兰公式。 二叉树在实际应用中非常广泛...
- 二叉树的定义、遍历方法及其在算法中的应用。 根据上述内容,可以合理推断文档包含了关于数据结构基础、算法基础、栈与队列操作、算法复杂度分析以及树结构的知识点。这份资料可以作为计算机科学学生或相关专业...