C/C++算法提高-数据结构【10.28】(更新中)

本文介绍了二叉树的基本概念及其实现方法,包括二叉树的存储结构、节点的查找与修改、节点的插入以及二叉树的创建等关键算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构中新学习到的数据存储结构,为了不总是看书上的伪代码,把各种数据结构常用的定义、算法总结在这里,以供之后复习使用。
2020.10.28

1.树与二叉树

①二叉树的存储结构
树的定义一般为递归定义,如果需要溯源到父节点,就定义为三叉链表(包含父节点指针),否则定义为二叉链表(只有左右孩子节点指针)。

struct node
{
    int data;//数据域
    node *lchild,*rchild,*parent;//左右孩子节点和父节点
};

node *root=NULL;//建树前根节点初始化

如果是二叉链表就把*parent删去即可。
新建一个节点可以使用新建函数:

node* newnode(int x)
{
    node *Node=new node;//申请地址
    Node->data=x;//赋值
    Node->lchild=Node->rchild=NULL;//初始状态没有左右孩子
    return Node;//返回节点地址
}

②二叉树节点的查找和修改
在二叉树中查找一个数并将其更改为新的值。

void searchnode(node *root,int x,int newdata)
{
    if(root==NULL)//空树,死胡同
        return;
    if(root->data==x)//找到后更改为新值
        root->data=newdata;
    searchnode(root->lchild,x,newdata);//往左子树搜索x(递归式)
    searchnode(root->rchild,x,newdata);//往右子树搜索x(递归式)
}

③二叉树节点的插入
二叉树结点的插入位置就是数据域在二叉树中查找失败的位置,而这个位置是确定的。因此在递归查找的过程中一定是只根据二叉树的性质来选择左子树或右子树中的一棵进行递归,且最后到达空树(死胡同)的地方就是查找失败的地方,也就是节点需要插入的地方。由此可以得到二叉树节点插入的方法:

void insertnode(node* &root,int x)
{
    if(root==NULL){//空树,死胡同,也是新节点应插在的地方
        root=newnode(x);
        return;
    }
    if(由性质得x应插在左子树)
        insertnode(root->lchild,x);//左子树递归搜索
    else
        insertnode(root->rchild,x);//右子树递归搜索
}
如果函数中需要需要新建节点,即对二叉树的结构做出修改,就需要加引用。如果仅仅修改当前已有节点的内容,或仅仅是遍历表,就不需要加引用。
在新建节点之后务必令新节点的左右指针为NULL,即表示这个节点目前没有左右子树。

④二叉树的创建
二叉树的创建就是二叉树节点的创建过程,而插入的数据域一般会由题目给出,因此最常见的做法就是把需要插入的数据先存放在数组中,再使用insert函数一个个插入二叉树中,并最终返回二叉树的根节点的指针root。

node* create(int data[],int n)
{
    node *root=NULL;//新建空根节点root
    for(int i=0;i<n;i++){
        insertnode(root,data[i]);插入新节点
    }
    return root;//返回根节点
}
### 解决方案分析 在处理 `The system cannot find the path specified` 错误时,通常需要检查以下几个关键点: 1. **路径是否存在**:确保指定的路径在系统中实际存在。如果路径不存在,则需要手动创建或修正路径[^1]。 2. **路径格式问题**:在 Windows 系统中,路径分隔符应使用反斜杠 `\` 而不是正斜杠 `/`。如果路径中包含特殊字符或空格,需用双引号 `""` 包裹路径[^2]。 3. **权限问题**:确保运行命令的用户具有对目标路径的读写权限。如果权限不足,可以尝试以管理员身份运行命令或调整文件夹权限。 4. **网络路径问题**:如果涉及远程路径(如 FTP 或 Jenkins 工作区),需要确认网络连接是否正常,以及远程服务器上的路径是否正确。 以下是针对 `Jenkins workspace` 和相关路径错误的具体解决方案: --- ### 具体解决步骤 #### 1. 检查本地目录是否存在 确保本地目录 `/data/jenkins/jenkinsrwerfserver` 存在于系统中。如果不存在,可以通过以下命令手动创建: ```bash mkdir -p /data/jenkins/jenkinsrwerfserver ``` #### 2. 验证远程 FTP 连接 确认 FTP 服务器 `10.28.152.78` 是否可访问,并验证登录凭据是否正确。可以使用以下命令测试连接: ```bash ftp 10.28.152.78 ``` 登录后,检查目标路径 `marschg/devops2gs8` 是否存在。如果路径不存在,请与服务器管理员确认。 #### 3. 修改 Jenkins 配置 在 Jenkins 中,确保工作区路径配置正确。如果路径中包含特殊字符或空格,需用双引号包裹路径[^2]。例如: ```bash /data/jenkins/"jenkinsrwerfserver" ``` #### 4. 检查权限设置 确保 Jenkins 用户对本地目录 `/data/jenkins/jenkinsrwerfserver` 具有读写权限。可以通过以下命令调整权限: ```bash chmod -R 755 /data/jenkins/jenkinsrwerfserver chown -R jenkins:jenkins /data/jenkins/jenkinsrwerfserver ``` #### 5. 日志排查 查看 Jenkins 的日志文件,定位具体的错误信息。日志文件通常位于以下路径: ```bash /var/log/jenkins/jenkins.log ``` 通过日志可以进一步确认是路径问题还是权限问题。 --- ### 示例代码 以下是一个简单的脚本,用于自动检查和修复路径问题: ```bash #!/bin/bash # 定义路径 LOCAL_DIR="/data/jenkins/jenkinsrwerfserver" # 检查路径是否存在 if [ ! -d "$LOCAL_DIR" ]; then echo "Directory does not exist. Creating..." mkdir -p "$LOCAL_DIR" fi # 检查权限 if [ ! -w "$LOCAL_DIR" ]; then echo "Adjusting permissions..." chmod -R 755 "$LOCAL_DIR" chown -R jenkins:jenkins "$LOCAL_DIR" fi echo "Path verification complete." ``` --- ### 注意事项 - 如果问题仍然存在,建议检查 Jenkins 的插件配置,确保 FTP 插件版本兼容且正确配置。 - 对于动态安装 Node.js 的问题,可以参考 nvm 的错误日志,确保下载路径和临时文件夹权限正确[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值