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

【数据结构/C++】树和二叉树_二叉链表

#include <iostream>
using namespace std;
// 二叉链表
typedef struct BiTNode
{
  int data;
  struct BiTNode *lchild, *rchild;
  BiTNode()
  {
    lchild = NULL;
    rchild = NULL;
  }
} BiTNode;
// 初始化二叉链表
void InitBiTree(BiTNode *&T)
{
  T = NULL;
}
// 先序遍历
void PreOrderTraverse(BiTNode *T)
{
  if (!T)
  {
    return;
  }
  cout << T->data << " ";
  PreOrderTraverse(T->lchild);
  PreOrderTraverse(T->rchild);
}
// 中序遍历
void InOrderTraverse(BiTNode *T)
{
  if (!T)
  {
    return;
  }
  InOrderTraverse(T->lchild);
  cout << T->data << " ";
  InOrderTraverse(T->rchild);
}
// 后序遍历
void PostOrderTraverse(BiTNode *T)
{
  if (!T)
  {
    return;
  }
  PostOrderTraverse(T->lchild);
  PostOrderTraverse(T->rchild);
  cout << T->data << " ";
}
// 求树的高度(深度)
int Height(BiTNode *T)
{
  if (!T)
  {
    return 0;
  }
  int lh = Height(T->lchild);
  int rh = Height(T->rchild);
  return (lh > rh) ? (lh + 1) : (rh + 1);
}
// 层序遍历
#include <queue>
void LevelOrderTraverse(BiTNode *T)
{
  if (!T)
  {
    return;
  }
  queue<BiTNode *> q;
  // 根入队
  q.push(T);
  while (!q.empty())
  {
    // 获取当前队首
    BiTNode *p = q.front();
    cout << p->data << " ";
    // 队首离开
    q.pop();
    if (p->lchild)
    {
      q.push(p->lchild);
    }
    if (p->rchild)
    {
      q.push(p->rchild);
    }
  }
}
int main()
{
  BiTNode *root = new BiTNode;
  root->data = 1;
  BiTNode *lchild = new BiTNode;
  lchild->data = 2;
  BiTNode *rchild = new BiTNode;
  rchild->data = 3;
  root->lchild = lchild;
  root->rchild = rchild;
  BiTNode *lchild2 = new BiTNode;
  lchild2->data = 4;
  BiTNode *rchild2 = new BiTNode;
  rchild2->data = 5;
  lchild->lchild = lchild2;
  lchild->rchild = rchild2;
  PreOrderTraverse(root);
  cout << endl;
  LevelOrderTraverse(root);
  cout << endl;
  cout << Height(root) << endl;
  return 0;
}

http://www.kler.cn/news/155235.html

相关文章:

  • 工业物联网数据传输方式探究
  • 【Spring Boot 源码学习】ApplicationContextInitializer 详解
  • 超大规模集成电路设计----基本概念(二)
  • [论文笔记] tiktoken中的gpt4 tokenizer
  • Linux系列-1 Linux启动流程——init与systemd进程
  • 申请Azure学生订阅——人工验证
  • tcp/ip协议 error=10022 Winsock.reg Winsock2.reg
  • 【JavaEE】多线程(3) -- 线程等待 wait 和 notify
  • WIFI HaLow:智能家居的不可或缺组成
  • Linux部署HDFS集群
  • Hadoop——分布式计算MapReduce和资源调度Yarn
  • 6-65.Shape抽象类
  • 【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷14
  • 第九节HarmonyOS 常用基础组件4-Button
  • Sharding-Jdbc(3):Sharding-Jdbc分表
  • 微信小程序组件与插件有啥区别?怎么用?
  • Vue3 中el-tree-select使用中遇到的一些问题
  • SCAU:1125 定义结构体类型
  • 【Leetcode题单】(01 数组篇)刷题关键点总结01【数组的遍历】
  • java游戏攻略资讯网站的设计与实现springboot+vue
  • C 语言实现TCP 通信,以及地址复用
  • 《凤凰项目》读书笔记
  • LeetCode刷题笔记第80题:删除有序数组中的重复项 II
  • pandas基础1
  • 观察者设计模式
  • ZooKeeper 如何保证数据一致性?
  • 二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
  • CentOS配置本地源
  • Python 内置异常
  • 内存函数​(memcpy、memmove、memset、memcmp)