开发工具:
文件大小: 589kb
下载次数: 0
上传时间: 2019-10-07
详细说明:部分LeetCode算法题和数据结构与算法书籍部分算法的实现,带有详细注释打印元素的祖先节点
typedef struct treenodei
struct treenode *left
struct treenode right;
int data
nt tag
streenode;
void getAncestor(treenode *root, int x)t
/栈
nt top =-1
treenode* stack MAX_ SIZE
treenodep
root
hile(p ii tol
/向左遍历直到达到最左节点或遇到指定的节点
while(p & p->data ! xt
p->tag =0
stack L++top= p
Left
//当遍历到指定节点时栈中的元素都是该节点的祖先节点
if(p & p->data ==xi
while(top >-1)t
printf( %d",stack[ top--]->data)
return
/如果左子树不存在x,则找到第一个右节点没有访问的节点
while(top!=-1 & stack[top]->tag== 1)t
to
/从该节点的右子节点开始之前的遍历
if(top!=-1)t
stack[ top]->tag= 1:
p= stack top]->right
表达式树转化为前缓表达式
typedef struct street
char data 11
struct Btree *left, *right;
REtree:
/表达式树转化为中缓表达式
void btreeZexp(Btree *root, int depth)t
if(! root)
return,
if(root->left = NULL & root->right = NULL)I
printf(%c, root->dataloG)
false
/第一层最外面不需要括号
if(depth ! =1)0
printf(():
//左子树表达式
btreeZexp(root->left, depth +1)
/符号
printf( %c, root->datalO)
//右节点表达式
btreeZexp(root->right, depth+1)
if(depth ! 1)
printf( ));
叉树的最大宽度
typedef struct treenodei
struct treenode * left
struct treenode right
int data
streenode;
int getWidth(treenode *root)t
if(! root)
return
0
//最大宽度
int maxWidth= 0
//记录当前层宽度
int count= 0
//队列
treenode queue LMAX_SIZE]
int head
1. taiL =-1
/根节点入队列
treenode p=root;
queue [++head= p
maxWidth=1
//分别用于记录当前层的最后节点和下一层的最后节点
treenode *thisend=p, exteNd= NULL
while head taili
p= queue [++tail]
if(p->left ! NULL )t
queue+thead
p->left
exteNd= p->left:
count+
if(p->right ! NULL)I
queue [+thead= p->right
exteNd= p->right:
count++;
if(p== thisEnd)t
thisend= exteNd
maxWidth= maxWidth > count maxWidth. count
count =0.
return maxWidth
自底向上、从右向左遍历二叉树
typedef struct treenodei
struct treenode *left:
struct treenode right;
int data;
f treenode
/自底向上,从右至左访问二叉树
void bottomZtop(treenode *root)t
//栈
Lnt top
treenode stack MAX-SIZE
//队列
int head =-1 tail =-1
treenode* queue MAX_ SIze
//根节点入队
treenode* p=root
queue ++head= p
//层次遍历,出队时入栈
while(head! =tail)t
p= queue[++tail]:
stack[++top= p
if(p->left)t
queue [+thead=p->left
if(p->right)t
queue [+head= p>right;
//栈里的顺序是从下往上、从右至左的
while(top!=-1)t
printf( %dt,stack[ top--]->data)
后续遍历二叉树-非递归
typedef struct treenodei
struct treenode *left:
struct treenode right;
int data;
f treenode
void lrn_nonrecursion (treenode *root)t
//栈
Lnt top
1
treenode* stack [MAX_SIZE
//用于记录上一次访问的节点
treenode *lastvisit= NUll
treenode p= root;
hile( top>-1 p)i
/树的最左边
if(p)i
stack++top
p= p->left:
helsel
p= stack[ top]
/存在右节点且未访问过
(p->right & p->right ! lastVisit)t
>right
ck [++top]=p
p->Left:
//不存在右节点或已经访问过
lsel
top
printf( %d\n",p->data);
lastvisit
p= NULL;
}
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.