typedef struct BiNode{
char ch;
struct BiNode*left;
struct BiNode*right;
}*BiTree;
/*
先序建立一颗二叉树
*/
void CreateBiTree(BiTree&T){
char ch;
scanf("%c", &ch);
if (ch == Nil){
T = NULL;
}
else{
T = (BiTree)malloc(sizeof(struct BTNode));
T->ch = ch;
CreateBiTree(T->left);
CreateBiTree(T->right);
/*
表达式求值
先求左子树表达式的值,再求右子树表达式的值,最后左右子树进行运算
param:
a:左子树的值
b:右子树的值
c:根节点的符号
return:运算的结果
*/
int op(int a,int b,char c){
switch(c){
case '+':return a+b;break;
case '-':return a-b;break;
case '*':return a*b;break;
case '/':return a/b;break;
}
}
int comp(BiTree&T){
int a,b;
if(T){
if(T->left&&T->right){
a=comp(T->left);//递归计算左子树的值
b=comp(T->right);//递归计算右子树的值
return op(a,b,T->ch);两颗子树最后进行运算
}else return T->ch-'0';
}else return 0;
}
/*
求二叉树的深度
*/
int depth(BiTree T){
int i=0,j=0;
if(!T) return 0;//如果树为空返回0
i=depth(T->left);//递归计算左子树的深度
j=depth(T->right);//递归计算右子树的深度
return i>j?i+1:j+1;
}
/*
普通的非二叉搜索树的搜索
*/
void search(BiTree&T,BiTree&q,char key){
if(T){
if(T->ch==key) {
q=T;
return;
}else{
search(T->left,q,key);
search(T->right,q,key);
}
}
}
/*
利用节点的右子树指针right将一颗二叉树的叶子节点按照从左往右的顺序串成一个单链表,head指向第一个叶子节点,tail指向最后一个叶子节点(递归版本)
*/
void make_leaftoLinkList_notRecursion(BiTree T,BiTree&head,BiTree&tail){
if(T){
if((T->left==NULL)&&(T->right==NULL)){
if(head==NULL){
head=T;
tail=T;
}else{
tail->right=T;
tail=T;
}
}else{
make_leaftoLinkList(T->left,head,tail);
make_leaftoLinkList(T->right,head,tail);
}
}
}
void make_leafToLinkList(BiTree&T, BiTree&head, BiTree&tail){
SqStack S;
init_stack(S);
BiTree p = NULL;
while (T || !stack_empty(S)){
if (T){
Push(S, T);
if ((T->left == NULL) && (T->right == NULL)){//说明T是叶子节点
if (head == NULL){
head = T;
tail = T;
p = T;
}
else{
tail->right = T;
tail = T;
}
}
T = T->left;
}
else{
Pop(S, T);
T = T->right;
}
}
}
/*
输出根节点到每个叶子节点的路径
*/
void print_root_to_leaf(BiTree T,int path[],int top){
path[top++]=T->ch;
if(T){
if ((T->left == NULL) && (T->right == NULL)){
printroot_path(path, top);
}
else{
if (T->left)print_root_to_leaf(T->left, path, top);
if (T->right) print_root_to_leaf(T->right, path, top);
}
}
}
二叉树的算法操作笔记
最新推荐文章于 2023-09-03 23:43:22 发布