二叉树:镜像树,子结构,二叉树转链表,二叉树的倒数K个数,对称,Z型打印

embedded/2024/9/23 4:42:50/

1.把一棵二叉树转换为它的镜像树。

void mirror_tree(TreeNode *root)
{if(root==NULL) return ;TreeNode *temp=root->right;root->right=root->left;root->left=temp;mirror_tree(root->right);mirror_tree(root->left);}

镜像树

2、输入两棵二叉树A,B,判断B是不是A的子结构(我们约定空树不是任意一个树的子结构)。

bool _is_zi(TreeNode *s1,TreeNode *s2)
{if(s1==NULL &&s2==NULL) return true;if(s1!=NULL&&s2==NULL) return false;if(s1==NULL&&s2!=NULL) return false;if(s1->date!=s2->data) return false;return _is_zi(s1->left,s2->left)&&_is_zi(s1->right,s2->right);}bool is_zi(TreeNode *root,TreeNode *node)
{if(root==NUll ) return false;if(root->data==node->data){bool a=_is_zi(root,node);if(bool) return true;}bool left=is_zi(root->left,node);bool right=is_zi(root->right,node);return right||left
}

3、将一棵有序二叉树转换成一个有序的双向链表

void *add_tail_node(TreeNode **head,TreeNode *node)
{if(*head==NULL){*head=node;	}else{(*head)->left->right=node;node->left=(*head)->left;}(*head)->left=node;}
void *_tree_to_list(TreeNode *root ,TreeNode **head)
{if(root==NULL) return ;//中序遍历树_tree_to_list(root->let,node);//根结点添加到链表add_tail_node(head,root)_tree_to_list(root->right,head);
}
//二插树链表
TreeNode *tree_to_list(TreeNode *root)
{//因为不带头结点用,二级指针TreeNode *head=NULL;_tree_to_list(root->left,&head);//最后一个元素的right需要重新指向head//而不能在add_tail中让right=head,这样会找不到右子树head->left->right=head;
}

4、计算出有序二叉树中倒数第K个大的数。

bool _access(TreeNode *root, int *k, int index, int *ptr) {  if (NULL == root) return false;  // 递归地访问右子树  bool rflag = _access(root->right, k, index, ptr);  if (rflag) return true; // 如果右子树中找到了结果,则直接返回  // 尝试在当前节点上找到结果  if ((*k)++ == index) {  *ptr = root->data;  return true;  }  // 递归地访问左子树  return _access(root->left, k, index, ptr);  
}

5、判断一个二叉树是否对称。

bool _is_sym(TreeNode *root1,TreeNode *root2)
{if(root1==NULL&&root2==NULL) return true;if(root1==NULL&&root2!==NULL) return false;if(root1==!NULL&&root2==NULL) return false;if(root1->data!=root2->data) return false;bool  lh=_is_sym(root1->left,root2->right);bool  rh=_is_sym(root2->right,root2->left);return lh&&rh
}
//5.对称
bool is_sym(TreeNode *root)
{_is_sym(root,root);	}

6、请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

//查找某节点
TreeNode *find_node(TreeNode *root, TREE_TYPE data)
{if (NULL == root){return NULL;}if (data == root->data){return root;}TreeNode *leftResult = find_node(root->left, data);if (leftResult != NULL){return leftResult;}TreeNode *rightResult = find_node(root->right, data);if (rightResult != NULL){return rightResult;}return NULL;
}//请实现一个函数按照之字形打印二叉树
void printf_zhi(TreeNode *root)
{if (NULL == root) return;ListStack *stack1 = create_Link_stack();ListStack *stack2 = create_Link_stack();push_Link_stack(stack1, root->data); // 将根节点入栈bool left_to_right = true; // 标记从左往右打印while (!empty_list_stack(stack1) || !empty_list_stack(stack2)){ListStack *current_stack = left_to_right ? stack1 : stack2;ListStack *next_stack = left_to_right ? stack2 : stack1;while (!empty_list_stack(current_stack)){TREE_TYPE data = top_list_stack(current_stack);printf("%c ", data);pop_List_stack(current_stack);TreeNode *current_node = find_node(root, data); // 找到当前节点if (current_node != NULL){if (left_to_right){if (current_node->left != NULL) push_Link_stack(next_stack, current_node->left->data);if (current_node->right != NULL) push_Link_stack(next_stack, current_node->right->data);}else{if (current_node->right != NULL) push_Link_stack(next_stack, current_node->right->data);if (current_node->left != NULL) push_Link_stack(next_stack, current_node->left->data);}}}left_to_right = !left_to_right; // 切换方向}
}

http://www.ppmy.cn/embedded/92851.html

相关文章

机器学习——第五章

目录 1 神经元模型2 感知机与多层网络3 误差逆传播算法(BP)4 全局最小与局部极小5 其他常见神经网络5.1 RBF网络5.2 ART网络5.3 SOM网络5.4 级联相关网络5.5 Elman网络5.6 Boltzmann机 6 深度学习 1 神经元模型 神经网络是由具有适应性的简单单元组成的…

Golang——逃逸分析

逃逸分析是指由编译器决定内存分配到堆上还是栈上。当我们在函数中申请了一个新的对象: 如果分配到栈中,则函数执行结束后可自动将内存回收。如果分配到堆中,则函数执行结束后,不会自动将内存释放掉,需要GC在进行清除…

PHP简单零售收银台系统源码小程序

🛒轻松上手!简单零售收银台系统,让经营更省心💸 🚀 开篇:告别繁琐,拥抱高效收银新时代 嘿,小店主们!👋 还在为每天繁琐的收银工作头疼吗?是时候…

贵阳高新区:加强数字人才培育 引领数字经济未来

在近期举行的贵阳高新区(贵州科学城)2024年科技创新与成果交流夏季活动中,来自清华大学2022级大数据(贵州)全日制工程硕士专业的学生们展示了他们在城市公交数据挖掘、通勤线路优化、场景数据的稳定训练以及营运车辆风…

如何在Java、C、Ruby语言中使用Newscatcher API

Newscatcher 世界实时新闻聚合API 一款强大的数据服务工具,它通过先进的网络爬虫技术,实时从全球超过70,000个新闻源聚合新闻内容。这个API能够提供全面、多角度的新闻报道,包括但不限于标题、作者、发布日期、全文内容以及媒体资源链接。它使…

centos 安装nacos

nacos官网下载安装包(安装nacos之前,先下载安装好jdk) 概览 | Nacos 官网 2.下载好nacos压缩包之后,上传到linux目录中(在/opt/目录下建好一个文件夹) 将nacos解压 uzip nacos-server-1.4.7.zip 进入naco…

GoLang 安装

golang学习笔记 goland 安装 To use Go programming language in Visual Studio Code (VSCode), you can follow these steps: 1. Install Go: Download and install the latest version of Go from the official Go website (https://golang.org/dl/). 2. Install VSCode:…

av.codec.codec.UnknownCodecError: libx264

遇到 av.codec.codec.UnknownCodecError: libx264 这个错误通常意味着 PyAV 库尝试使用 libx264 编码器来编码或解码视频,但该编码器在你的系统中不可用。 libx264 是一个广泛使用的 H.264 视频编码库。如果你正在使用 PyAV 来处理视频,特别是当你尝试读…