当前位置:   article > 正文

二叉树排序_二叉排序树 节点值相同

二叉排序树 节点值相同

一、概念

  排序二叉树是一种特殊结构的二叉树,通过它可以非常方便的对树中所有节点进行排序和检索,结构特点:分为左子树,右子树,节点,最深的叫做叶子节点。排序二叉树要么是一棵空的二叉树,要么就是具有下列性质的二叉树,

  1、若他的左子树不为空,则左子树上所有节点的值均小于它的根节点的值。

  2、若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值。

  3、它的左、右子树也分别为排序二叉树。

  4、二叉树节点的值不允许重复。

二、时间复杂度:

      二叉排序树的查找性能在O(Log2n)到O(n)之间;

三、二叉树遍历方式:

     二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。为啥叫这个名字?是根据根节点的顺序命名的。

    例如:A:根节点、B:左节点、C:右节点,前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)。

以下是通过swift编写的一个二叉树排序程序:

  1. class BiTree {
  2. var data: Int
  3. var left: BiTree?
  4. var right: BiTree?
  5. init(data: Int) {
  6. self.data = data
  7. }
  8. /// 添加规则:比节点小的放在左子树,大的放在右子树
  9. func add(element: BiTree) {
  10. if element.data < self.data {
  11. if self.left == nil {
  12. self.left = element
  13. } else {
  14. self.left?.add(element: element)
  15. }
  16. } else {
  17. if self.right == nil {
  18. self.right = element
  19. } else {
  20. self.right?.add(element: element)
  21. }
  22. }
  23. }
  24. /// 中序遍历,左 -> 根 -> 右
  25. func travel() {
  26. if self.left != nil {
  27. self.left?.travel()
  28. }
  29. print(data)
  30. if self.right != nil {
  31. self.right?.travel()
  32. }
  33. }
  34. /// 倒序
  35. /// func backTravel() {
  36. /// if self.right != nil {
  37. /// self.right?.backTravel()
  38. /// }
  39. /// print(data)
  40. /// if self.left != nil {
  41. /// self.left?.backTravel()
  42. /// }
  43. /// }
  44. }
  45. let tree = BiTree(data: 12)
  46. tree.add(element: BiTree(data: 9))
  47. tree.add(element: BiTree(data: 8))
  48. tree.add(element: BiTree(data: 20))
  49. tree.add(element: BiTree(data: 5))
  50. tree.add(element: BiTree(data: 11))
  51. tree.travel()
  52. tree.backTravel()
  53. /// 中序遍历:输出结果 5 8 9 11 12 20
  54. /// 20 12 11 9 8 5

如果转载请注明转于:AirZilong的博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/681237
推荐阅读
相关标签
  

闽ICP备14008679号