ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二叉树入门简析

2022-04-05 18:31:05  阅读:149  来源: 互联网

标签:TreeNode 入门 value fa 简析 二叉树 root 节点


给出一些二叉树的入门级(确信)使用方法:

 1 //用递归的方式建立一个完全二叉树
 2 void Bulid(int t){
 3     UpdateData(t);  //添加数据
 4     Build(t + t);   //如果子节点存在
 5     Build(t + t + 1);
 6     //用这种方法建立非完全二叉树 会存在空间浪费的问题
 7 }
 8 
 9 //可以用数组下标模拟节点编号,用多个数组来记录节点信息
10 struct TreeNode1{    //可以存储一般二叉树
11     int value;      //但是也会产生浪费的空间,具体用哪个就看情况了
12     int l,r,fa;
13 } a[100001];
14  
15 //也可以与链表类似,用指针存储二叉树的父节点&子节点 同时要记录根节点指针
16 struct TreeNode2{
17     int value;
18     TreeNode2 *l,*r,*fa;
19 };
20 TreeNode2 *root;
21 
22 //以下就以指针操作来简介二叉树的基本操作
23 
24 //新建节点
25 struct TreeNode{
26     int value;
27     TreeNode *l, *r, *fa; //初始为NULL
28     TreeNode(int x){ value = x;}
29 }
30 TreeNode *p = new TreeNode(x);
31 
32 //根节点初始化
33 TreeNode *root;
34 root = new TreeNode(v);
35 
36 //删除节点(暂空)
37 
38 //插入子节点
39 void Insert(TreeNode *fa, TreeNode *p,int flag){
40     //flag = 0 插入到左边
41     //flag = 1 插入到右边
42     if (!flag){
43         fa->l = p;
44     }
45     else{
46         fa->r = p;
47     }
48     p->fa = fa;
49 }
50 
51 TreeNode *p = new TreeNode(v);
52 Insert(fa,p,flag);
53 
54 
55 //二叉树的遍历顺序(先序遍历、中序遍历、后序遍历)<-以根节点的访问时间作为区分
56 
57 //先序遍历(DLR)
58 void PreOrder(TreeNode *p){
59     cout << p->value << endl;
60     if (p->l) PreOrder(p->l);
61     if (p->r) PreOrder(p->r);
62 }
63 Pre Order(root);
64 
65 //中序遍历(LDR)
66 void InOrder(TreeNode *p){
67     if (p->l) InOrder(p->l);
68     cout << p->value << endl;
69     if (p->r) InOrder(p->r);
70 }
71 InOrder(root);
72 
73 //后序遍历(LRD)
74 void PostOrder(TreeNode *p){
75     if (p->l) PostOrder(p->l);
76     if (p->r) PostOrder(p->r);
77     cout << p->value << endl;
78 }
79 PostOrder(root);
80 
81 //层级遍历(BFS序列)(基于队列)
82 TreeNode *q[N];
83 void BFS(TreeNode *root){
84     int front = 1, rear = 1;
85     q[1] = root;
86     while (front <= rear){
87         TreeNode *p = q[front];
88         front++;
89         cout << p->value << endl;
90         if (p->l) q[++rear] = p->l;
91         if (p->r) q[++rear] = p->r;
92     }
93 }
94 BFS(root);
95 
96 //要实现计算每个节点的深度也不难
97 //root->d = 1; 每次++时p->l/r->d=p->d+1;

 

标签:TreeNode,入门,value,fa,简析,二叉树,root,节点
来源: https://www.cnblogs.com/Conqueror712/p/16103303.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有