静态二叉树创建及先序遍历实现教程

版权申诉
0 下载量 128 浏览量 更新于2024-10-08 收藏 737B ZIP 举报
资源摘要信息: "the-static-binary-tree-and-input.zip_The Tree_vc6.0" 在本节内容中,我们将探讨如何在C++环境下建立一个静态二叉树结构,并实现其先序遍历的算法。这里所提及的“静态”通常指的是二叉树的数据结构在程序执行过程中不会改变,即树的节点数和结构是固定的。这一过程在Windows平台下的VC6.0集成开发环境中已得到验证并能够运行通过。 知识点如下: 1. 二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。在二叉树中,一个节点的所有子节点都是非空的被称为“满二叉树”,而所有叶子都在同一层的被称为“完全二叉树”。二叉树在计算机科学中有着广泛的应用,例如二叉搜索树、堆和哈夫曼树等。 2. 静态二叉树的定义与实现 静态二叉树意味着在程序初始化后,树的结构和节点内容都不会发生改变。在C++中,静态二叉树通常是通过结构体(或类)来定义节点,并通过指针连接各节点以形成树状结构。以下是一个简单的静态二叉树节点定义示例: ```cpp struct TreeNode { int val; // 节点存储的值 TreeNode *left; // 指向左子节点的指针 TreeNode *right; // 指向右子节点的指针 // 构造函数初始化节点 TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; ``` 通过这样的结构体定义,我们可以创建一个静态二叉树。 3. 先序遍历算法 先序遍历是一种深度优先遍历二叉树的方式,遍历顺序为:先访问根节点,然后遍历左子树,最后遍历右子树。这是一个递归过程,也可以通过迭代的方式实现。下面是一个递归实现的先序遍历函数示例: ```cpp void preorderTraversal(TreeNode* root) { if (root == NULL) return; // 空节点不遍历 // 先访问根节点 std::cout << root->val << " "; // 递归遍历左子树 preorderTraversal(root->left); // 递归遍历右子树 preorderTraversal(root->right); } ``` 4. VC6.0集成开发环境 Visual C++ 6.0是微软公司在1998年发布的集成开发环境,它允许开发者编写、编译和调试C++代码。VC6.0在当时非常流行,尽管现在已经被更新的Visual Studio版本所取代,但在一些老旧项目中仍然可以看到它的身影。在VC6.0中,代码可以被编译为.exe可执行文件,并在Windows平台上运行。 5. 文件命名约定 压缩文件包名为“the-static-binary-tree-and-input.zip_The Tree_vc6.0”,从文件名可以推断,该文件包含的是与静态二叉树及其先序遍历相关的C++源代码,且代码已被验证可以在VC6.0环境下编译和运行。 6. 具体实现文件 在文件列表中,“静态二叉树的建立及先序遍历.cpp”是实际实现静态二叉树创建及其先序遍历的源代码文件。该文件包含程序的入口点main函数以及用于创建和遍历树的函数。 7. 开发者注意事项 开发静态二叉树程序时,需要注意节点的内存管理,确保创建的树在使用完毕后能够正确地释放内存资源。同时,为了保持代码的可读性和可维护性,应当遵循良好的编程实践,包括合理的命名、代码注释以及模块化设计。 总结而言,本节资源包中的内容涵盖了创建静态二叉树的基础知识、先序遍历算法的实现,以及VC6.0环境下的代码编译和运行。这些知识点是数据结构与算法课程中常见的内容,并且在软件开发中有着广泛的应用。

转python写法:#!/bin/sh time_stamp=`date +%s` function CheckStop() { if [ $? -ne 0 ]; then echo "execute fail, error on line_no:"$1" exit!!!" exit fi } function GenEcdsaKey() { ec_param_file_path="/tmp/ec_param.pem."$time_stamp openssl ecparam -out $ec_param_file_path -name prime256v1 -genkey CheckStop $LINENO openssl genpkey -paramfile $ec_param_file_path -out $1 CheckStop $LINENO openssl pkey -in $1 -inform PEM -out $2 -outform PEM -pubout CheckStop $LINENO rm $ec_param_file_path echo "gen_ecdsa_key succ prikey_path:"$1" pubkey_path:"$2 } function GenEcdsaSign() { ec_sign_info_file="/tmp/ec_sign_info_file."$time_stamp ec_sign_info_sha256="/tmp/ec_sign_info_sha256."$time_stamp ec_binary_sign_file="/tmp/ec_binary_sign_file."$time_stamp echo -n "$1"_"$2" > $ec_sign_info_file openssl dgst -sha256 -binary -out $ec_sign_info_sha256 $ec_sign_info_file CheckStop $LINENO openssl pkeyutl -sign -in $ec_sign_info_sha256 -out $ec_binary_sign_file -inkey $3 -keyform PEM CheckStop $LINENO openssl base64 -e -in $ec_binary_sign_file -out $4 CheckStop $LINENO rm $ec_sign_info_file $ec_sign_info_sha256 $ec_binary_sign_file echo "gen_ecdsa_sign succ sign_file_path:"$4 } function VerifyEcdsaSign() { ec_sign_info_file="/tmp/ec_sign_info_file."$time_stamp ec_sign_info_sha256="/tmp/ec_sign_info_sha256."$time_stamp ec_binary_sign_file="/tmp/ec_binary_sign_file."$time_stamp echo -n "$1"_"$2" > $ec_sign_info_file openssl dgst -sha256 -binary -out $ec_sign_info_sha256 $ec_sign_info_file CheckStop $LINENO openssl base64 -d -in $4 -out $ec_binary_sign_file CheckStop $LINENO openssl pkeyutl -verify -in $ec_sign_info_sha256 -sigfile $ec_binary_sign_file -pubin -inkey $3 -keyform PEM rm $ec_sign_info_file $ec_sign_info_sha256 $ec_binary_sign_file } function Usage() { echo "Usage:" echo "mmiot_ecdsa_sign.sh gen_ecdsa_key <private_key_file_path> <public_key_file_path>" echo "mmiot_ecdsa_sign.sh gen_ecdsa_sign <product_id> <sn> <private_

2023-05-31 上传

import tensorflow as tf import tensorflow_hub as hub from tensorflow.keras import layers import bert import numpy as np from transformers import BertTokenizer, BertModel # 设置BERT模型的路径和参数 bert_path = "E:\\AAA\\523\\BERT-pytorch-master\\bert1.ckpt" max_seq_length = 128 train_batch_size = 32 learning_rate = 2e-5 num_train_epochs = 3 # 加载BERT模型 def create_model(): input_word_ids = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32, name="input_word_ids") input_mask = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32, name="input_mask") segment_ids = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32, name="segment_ids") bert_layer = hub.KerasLayer(bert_path, trainable=True) pooled_output, sequence_output = bert_layer([input_word_ids, input_mask, segment_ids]) output = layers.Dense(1, activation='sigmoid')(pooled_output) model = tf.keras.models.Model(inputs=[input_word_ids, input_mask, segment_ids], outputs=output) return model # 准备数据 def create_input_data(sentences, labels): tokenizer = bert.tokenization.FullTokenizer(vocab_file=bert_path + "trainer/vocab.small", do_lower_case=True) # tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') input_ids = [] input_masks = [] segment_ids = [] for sentence in sentences: tokens = tokenizer.tokenize(sentence) tokens = ["[CLS]"] + tokens + ["[SEP]"] input_id = tokenizer.convert_tokens_to_ids(tokens) input_mask = [1] * len(input_id) segment_id = [0] * len(input_id) padding_length = max_seq_length - len(input_id) input_id += [0] * padding_length input_mask += [0] * padding_length segment_id += [0] * padding_length input_ids.append(input_id) input_masks.append(input_mask) segment_ids.append(segment_id) return np.array(input_ids), np.array(input_masks), np.array(segment_ids), np.array(labels) # 加载训练数据 train_sentences = ["Example sentence 1", "Example sentence 2", ...] train_labels = [0, 1, ...] train_input_ids, train_input_masks, train_segment_ids, train_labels = create_input_data(train_sentences, train_labels) # 构建模型 model = create_model() model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate), loss='binary_crossentropy', metrics=['accuracy']) # 开始微调 model.fit([train_input_ids, train_input_masks, train_segment_ids], train_labels, batch_size=train_batch_size, epochs=num_train_epochs)这段代码有什么问题吗?

2023-05-24 上传