输出单层结点

设计算法从二叉树中获取指定深度的所有结点,形成链表,按从左到右的顺序排列,结点值为非负整数且不超过100000。

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。

给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。

-----------------------------------------

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
 
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class TreeLevel {
public:
    ListNode* getTreeLevel(TreeNode* root, int dep) {
        // write code here
        if (!root)
            return nullptr;
        ListNode *res = new ListNode(root->val);
        ListNode *p = res;//工作指针
        queue<struct TreeNode*> que;
        if (dep == 1)
            return res;
        que.push(root);
        int curlevel = 1;//当前层
        int ininum = 1;//初始hua层节点数
        int curnum;
        while(!que.empty() && curlevel < dep){
            curnum = ininum;
            ininum = 0;
            for (int i=0; i<curnum; ++i){
                //利用前一层 让当前层进队
                struct TreeNode* cur = que.front();
                que.pop();
                if (cur->left){
                    //有左孩子 左孩子进队,当前层节点树+1
                    que.push(cur->left);
                    ++ininum;
                }
                if (cur->right){
                    //有左孩子 左孩子进队,当前层节点树+1
                    que.push(cur->right);
                    ++ininum;
                }
            }
            ++curlevel;
        }
        //队列中节点即为所需
        while(!que.empty()){
            ListNode *node = new ListNode(que.front()->val);
            que.pop();
            p->next = node;
            p = node;
        }
        return res->next;
    }
};


单层感知器是感知器中最简单的种,由单个神经元组成,只能用于解决线性可分的二分性问题。以下以Python为例说明其程序实现思路与代码示例。 ### 实现思路 1. **输入数据**:输入层接受外界信号,输入层有n个神经元结点,每个结点接受一个输入信号xi,同时考虑外部偏置b,输入层与输出层之间有权重w。 2. **计算净输入**:将每个结点组成的输入矩阵和权值矩阵相乘,得到一个数,作为净输入传递给神经元细胞。 3. **激活函数**:将净输入代入激活函数中,激活函数般采用符号函数,然后输出一个数。 4. **调整权重**:根据输出结果与真实标签的差异,调整权重,使得输出结果逐渐接近真实标签。 ### 代码示例 ```python import numpy as np # 定义激活函数(符号函数) def sign(x): return 1 if x >= 0 else -1 # 单层感知器类 class SinglePerceptron: def __init__(self, input_size, learning_rate=0.1): # 初始化权重,包括偏置,取 -1 到 1 的随机数 self.weights = np.random.uniform(-1, 1, input_size + 1) self.learning_rate = learning_rate def predict(self, inputs): # 添加偏置项 inputs = np.insert(inputs, 0, 1) # 计算净输入 net_input = np.dot(inputs, self.weights) # 通过激活函数得到输出 return sign(net_input) def train(self, training_inputs, labels, max_epochs=100): for _ in range(max_epochs): for inputs, label in zip(training_inputs, labels): # 进行预测 prediction = self.predict(inputs) # 计算误差 error = label - prediction # 添加偏置项 inputs = np.insert(inputs, 0, 1) # 调整权重 self.weights += self.learning_rate * error * inputs # 示例数据 training_inputs = np.array([[3, 3], [4, 3], [1, 1], [0, 2]]) labels = np.array([1, 1, -1, -1]) # 创建单层感知器实例 perceptron = SinglePerceptron(input_size=2, learning_rate=0.1) # 训练感知器 perceptron.train(training_inputs, labels) # 测试 for inputs in training_inputs: print(f"输入: {inputs}, 预测输出: {perceptron.predict(inputs)}") ``` ### 代码解释 1. **激活函数**:`sign`函数实现了符号函数,用于将净输入转换为输出结果(1 或 -1)。 2. **单层感知器类**:`SinglePerceptron`类包含了初始化、预测和训练方法。 - `__init__`方法:初始化权重和学习率。 - `predict`方法:根据输入数据计算净输入,并通过激活函数得到输出结果。 - `train`方法:根据输出结果与真实标签的差异,调整权重,使得输出结果逐渐接近真实标签。 3. **示例数据**:定义了训练数据和对应的标签。 4. **训练与测试**:创建单层感知器实例,进行训练,并对训练数据进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值