当前位置:   article > 正文

【数据结构】二叉树链接结构基本操作_二叉树创建根节点时怎么保证左右子树地址不同

二叉树创建根节点时怎么保证左右子树地址不同

二叉树顺序存储的优缺点:

顺序存储结构就是使用数组来存储,顺序结构操作比较简单,对于堆结构来说,适合使用顺序存储方式来解决。但数组只适合表示完全二叉树,对于一般的二叉树如果采用顺序存储方式会造成大量的空间浪费,这是我们不希望看到的。

由此引出来二叉树的链式存储。并实现二叉树的以下操作:

创建二叉树、拷贝二叉树、销毁二叉树、二叉树遍历(前序、中序、后续、层序)、获取二叉树中节点个数、获取二叉树中第K层节点个数、获取二叉树中叶子节点个数、二叉树高度(深度)、检测给定值的元素是否在二叉树中、二叉树的镜像以及判断二叉树是否为完全二叉树。

二叉树定义:使用孩子表示法

  1. typedef char BTDataType;
  2. typedef struct BTNode
  3. {
  4. struct BTNode* _pLeft;
  5. struct BTNode* _pRight;
  6. BTDataType _data;
  7. }BTNode;

头文件中函数声明:

  1. //二叉树的创建
  2. BTNode* CreatBinTree(BTDataType* array, int size, BTDataType invalid);
  3. //二叉树的拷贝
  4. BTNode* CopyBinTree(BTNode* pRoot);
  5. //二叉树的销毁
  6. void DestoryBinTree(BTNode** pRoot);
  7. //递归:前序遍历
  8. void PreOrder(BTNode* pRoot);
  9. //递归:中序遍历
  10. void InOrder(BTNode* pRoot);
  11. //递归:后序遍历
  12. void PostOrder(BTNode* pRoot);
  13. //层序遍历
  14. void LevelOrder(BTNode* pRoot);
  15. //获取二叉树中节点个数
  16. int GetBinTreeSize(BTNode* pRoot);
  17. //获取二叉树中第k层节点个数
  18. int GetKLevelNodeCount(BTNode* pRoot, int K);
  19. //获取二叉树中叶子节点个数
  20. int GetLeafCount(BTNode* pRoot);
  21. //获取二叉树高度(深度)
  22. int GetBinTreeHeight(BTNode* pRoot);
  23. //检测值为x的元素是否在二叉树中,在则返回该节点的地址,否则返回NULL
  24. BTNode* BinaryTreeFind(BTNode* pRoot, BTDataType x);
  25. //二叉树的镜像
  26. void MirrorNor(BTNode* pRoot);
  27. void Mirror(BTNode* pRoot);
  28. //判断二叉树是否是完全二叉树
  29. int BinaryTreeComplete(BTNode* pRoot);

1、二叉树的创建

首先创建二叉树的根节点,然后递归创建根节点的左子树及右子树。此处还要用到新建节点的函数BuyBinTreeNode。

创建二叉树函数所需的参数包括存放数据的数组array、有效元素个数size、存放位

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

闽ICP备14008679号