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

重庆网站建设公司咨询亿企帮航天信息企业管理软件

重庆网站建设公司咨询亿企帮,航天信息企业管理软件,个人简历模板免费下载手机版,青岛广久网络技术有限公司C#二叉树 二叉树是一种常见的数据结构,它是由节点组成的一种树形结构,其中每个节点最多有两个子节点。二叉树的一个节点通常包含三部分:存储数据的变量、指向左子节点的指针和指向右子节点的指针。二叉树可以用于多种算法和操作,…

C#二叉树

二叉树是一种常见的数据结构,它是由节点组成的一种树形结构,其中每个节点最多有两个子节点。二叉树的一个节点通常包含三部分:存储数据的变量、指向左子节点的指针和指向右子节点的指针。二叉树可以用于多种算法和操作,如搜索、排序和遍历。

在这里插入图片描述

二叉树遍历

遍历方式顺序C#递归实现核心代码
前序遍历根 → 左 → 右Console.Write(root.val); → 递归左 → 递归右
中序遍历左 → 根 → 右递归左 → Console.Write(root.val); → 递归右
后序遍历左 → 右 → 根递归左 → 递归右 → Console.Write(root.val);

二叉树的应用场景

  1. 快速查找与排序
    • 二叉搜索树用于实现字典、数据库索引(如B树、B+树的基础)。
  2. 表达式树
    • 编译器解析数学表达式时构建二叉树,叶节点为操作数,非叶节点为运算符。
  3. 哈夫曼编码
    • 通过构建最优二叉树实现数据压缩。
  4. 决策树与机器学习
    • 二叉树结构用于分类和回归模型的决策过程。

二叉树的优缺点

优点缺点
逻辑清晰,易于实现递归操作普通二叉树可能退化为链表(时间复杂度升至O(n))
二叉搜索树支持高效查找/插入平衡二叉树实现复杂(如AVL树的旋转操作)
天然适合分治算法(如快速排序)存储指针占用额外内存空间
实例1
using System;
using System.Collections.Generic;public class TreeNode
{public int val;public TreeNode left;public TreeNode right;public TreeNode(int x) { val = x; }
}class BinaryTreeDemo
{static void Main(){// 构建二叉树TreeNode root = new TreeNode(1){left = new TreeNode(2){left = new TreeNode(4),right = new TreeNode(5)},right = new TreeNode(3)};Console.WriteLine("前序遍历:");PreOrder(root); // 输出: 1 2 4 5 3Console.WriteLine("\n层序遍历:");LevelOrder(root); // 输出: 1 2 3 4 5}// 前序遍历static void PreOrder(TreeNode root){if (root == null) return;Console.Write(root.val + " ");PreOrder(root.left);PreOrder(root.right);}// 层序遍历static void LevelOrder(TreeNode root){if (root == null) return;Queue<TreeNode> queue = new Queue<TreeNode>();queue.Enqueue(root);while (queue.Count > 0){TreeNode node = queue.Dequeue();Console.Write(node.val + " ");if (node.left != null) queue.Enqueue(node.left);if (node.right != null) queue.Enqueue(node.right);}}
}
实例2
public class TreeNode<T>
{public T Value { get; set; }public TreeNode<T> Left { get; set; }public TreeNode<T> Right { get; set; }public TreeNode(T value){Value = value;Left = null;Right = null;}
}public class BinaryTree<T>
{public TreeNode<T> Root { get; private set; }public BinaryTree(){Root = null;}// 插入新值到二叉树中public void Add(T value){if (Root == null){Root = new TreeNode<T>(value);}else{AddTo(Root, value);}}private void AddTo(TreeNode<T> node, T value){if (Comparer<T>.Default.Compare(value, node.Value) < 0){if (node.Left == null){node.Left = new TreeNode<T>(value);}else{AddTo(node.Left, value);}}else{if (node.Right == null){node.Right = new TreeNode<T>(value);}else{AddTo(node.Right, value);}}}// 前序遍历(根-左-右)public void PreOrderTraversal(TreeNode<T> node){if (node != null){Console.WriteLine(node.Value); // 访问节点PreOrderTraversal(node.Left);   // 遍历左子树PreOrderTraversal(node.Right);  // 遍历右子树}}// 中序遍历(左-根-右)public void InOrderTraversal(TreeNode<T> node){if (node != null){InOrderTraversal(node.Left);   // 遍历左子树Console.WriteLine(node.Value); // 访问节点InOrderTraversal(node.Right);  // 遍历右子树}}// 后序遍历(左-右-根)public void PostOrderTraversal(TreeNode<T> node){if (node != null){PostOrderTraversal(node.Left);   // 遍历左子树PostOrderTraversal(node.Right);  // 遍历右子树Console.WriteLine(node.Value);   // 访问节点}}
}
实例3
class BSTDemo
{static void Main(){TreeNode root = null;// 插入节点root = InsertBST(root, 5);InsertBST(root, 3);InsertBST(root, 7);InsertBST(root, 2);Console.WriteLine("中序遍历BST:");InOrder(root); // 输出: 2 3 5 7// 删除节点3root = DeleteNode(root, 3);Console.WriteLine("\n删除后:");InOrder(root); // 输出: 2 5 7}// BST插入static TreeNode InsertBST(TreeNode root, int val){if (root == null) return new TreeNode(val);if (val < root.val)root.left = InsertBST(root.left, val);elseroot.right = InsertBST(root.right, val);return root;}// BST删除(使用之前定义的DeleteNode方法)// 中序遍历static void InOrder(TreeNode root){if (root == null) return;InOrder(root.left);Console.Write(root.val + " ");InOrder(root.right);}
}
实例4
class SymmetricTreeDemo
{static void Main(){// 对称二叉树TreeNode root1 = new TreeNode(1){left = new TreeNode(2) { left = new TreeNode(3), right = new TreeNode(4) },right = new TreeNode(2) { left = new TreeNode(4), right = new TreeNode(3) }};// 非对称二叉树TreeNode root2 = new TreeNode(1){left = new TreeNode(2) { right = new TreeNode(3) },right = new TreeNode(2) { right = new TreeNode(3) }};Console.WriteLine("root1是否对称: " + IsSymmetric(root1)); // trueConsole.WriteLine("root2是否对称: " + IsSymmetric(root2)); // false}static bool IsSymmetric(TreeNode root){if (root == null) return true;return CheckSymmetric(root.left, root.right);}static bool CheckSymmetric(TreeNode left, TreeNode right){if (left == null && right == null) return true;if (left == null || right == null) return false;return left.val == right.val && CheckSymmetric(left.left, right.right)&& CheckSymmetric(left.right, right.left);}
}
实例5
class DepthDemo
{static void Main(){TreeNode root = new TreeNode(1){left = new TreeNode(2) { left = new TreeNode(4) },right = new TreeNode(3)};Console.WriteLine("最大深度: " + MaxDepth(root)); // 输出: 3}static int MaxDepth(TreeNode root){if (root == null) return 0;return Math.Max(MaxDepth(root.left), MaxDepth(root.right)) + 1;}
}
实例6
class PathSumDemo
{static void Main(){TreeNode root = new TreeNode(5){left = new TreeNode(4) { left = new TreeNode(11) { left = new TreeNode(7), right = new TreeNode(2) } },right = new TreeNode(8) { left = new TreeNode(13), right = new TreeNode(4) { right = new TreeNode(1) } }};Console.WriteLine("是否存在和为22的路径: " + HasPathSum(root, 22)); // true}static bool HasPathSum(TreeNode root, int targetSum){if (root == null) return false;if (root.left == null && root.right == null)return root.val == targetSum;return HasPathSum(root.left, targetSum - root.val) || HasPathSum(root.right, targetSum - root.val);}
}

关键点总结

  1. 递归思想:二叉树问题多通过递归解决,注意终止条件(root == null
  2. BST特性:插入/删除时利用左小右大规则
  3. 遍历选择
    • 前序:根节点最先访问
    • 中序:BST会得到有序序列
    • 层序:需要队列辅助
  4. 空间复杂度
    • 递归:O(h)(h为树高)
    • 层序:O(n)
http://www.dtcms.com/wzjs/575310.html

相关文章:

  • 潍坊做网站的网络公司建设信息发布平台多少钱
  • 太原网站设计开发公司网站建设试题以及答案
  • 电脑什么网站可以做长图攻略湖州百度网站建设
  • 建站公司佛山网站公司图片
  • 给公司做网站 优帮云定制礼品公司
  • 网站用php与asp哪个好凡科建站和华为云哪个好
  • 外贸建英文网站的重要性上海网站建设网站优化app
  • 栏目手机版 企业网站柳州网站优化公司
  • 网站建立失败的原因是牡丹江哪个网络好
  • 淘宝网站建设代码企业外包的风险与对策
  • 什么网站做禽苗的多布吉网站建设多少钱
  • 有什么网上做c 的网站百度有几个总部
  • 苏州网站开发网站开发费用涂料网站设计公司
  • 电子商城网站建设的实训内容网站文章编辑器
  • 佛山企业快速建站小程序与手机网站区别
  • 赣州网站推广哪家最专业网站开发技术前景最好
  • 广告公司可以做网站吗嘉兴制作网站
  • 广州优化网站建设做电影下载网站成本
  • 进一步推进网站集约化建设为什么做的网站预览出来什么都没有
  • 自己做网站上市旅游网站建设模块
  • 会计上大额网站费如何做分录什么是百度权重
  • 机关网站建设工程总结烟台市芝罘区住房和建设局网站
  • 北京住房建设厅网站免费网页代理在线
  • 电影网站制作教程简单风景网站模版
  • 国内小程序开发公司搜索引擎推广与优化
  • 电子商务网站建设与维护书南昌网站建设精英
  • 购物网站怎么运营推广app制作免费平台
  • 视频上传网站源码wordpress离线文章发布
  • python网站开发案例莱州双语网站
  • 网站开发包括优秀手机网站欣赏