老大培训

今天听了老大的培训,感触很深,总结一下:

(1)关于调查研究和个人吸收理解的问题

     广泛调查是很好的工作习惯,但是需要更多的时间进行材料整理吸收,特别是理解原来开发者设计时候的出发点,这个设计满足了什么需求,这个需求跟自己碰到的情况有什么差别的地方,能否满足,如何修改。
     感谢自己遇到了优秀的业内人士,敏锐的把问题的直接要害指出。

(2)关于个人思维习惯的形成和突破
     每个新人都有自己的思维习惯带到工作环境中,其中有好的有坏的,很多思维习惯渐渐就被反映在工作的细节当中,影响着你的决策,有时候你是输给了你自己,努力改变思维方式,寻找突破  

### 关于树的数据结构与算法 #### 树的基本概念 树是一种非线性的数据结构,由节点和连接这些节点的边组成。它具有层次化的特性,适合用于表示具有层级关系的数据[^3]。 #### 定义管理结构体 为了在程序中实现一棵二叉树,通常会定义如下所示的结构体: ```c typedef struct b_tree { int data; struct b_tree *lchild; // 左子节点 struct b_tree *rchild; // 右子节点 } node, *p_node; ``` 此结构体包含了三个部分:`data` 存储节点中的实际数据,`lchild` 和 `rchild` 则分别指向其左孩子和右孩子节点[^2]。 #### 树的重要术语 - **结点**:树中的基本单元,包含数据以及指向其他结点的链接。 - **度**:对于单个结点而言,它的度是指其所拥有的子树数目;而对于整棵树来说,则是所有结点中最大的度数。 - **叶子**:没有孩子的结点被称为叶结点,也就是度为0 的结点。 - **分支结点**:至少拥有一个子结点的结点称为内部结点或分支结点。 - **兄弟结点**:共享同一个父结点的结点互为兄弟。 - **层数**:从根开始定义起始层为1 ,每增加一层则加1 。 - **深度/高度**:树的高度是从根到最远叶子最长路径上的结点数量减去1 。如果只考虑边的数量也可以简单理解成最大层数减一[^3]。 #### 常见树的操作及其对应的算法 - **遍历** 遍历是对整个树进行访问的一种方式,常见的三种主要形式包括前序遍历、中序遍历和后序遍历。它们的区别在于何时处理当前结点相对于递归调用左右子树的位置不同[^1]。 - **查找** 查找操作旨在定位特定值所在的结点位置。如果是二叉搜索树(BST),那么可以根据比较大小快速缩小范围找到目标项。 - **插入** 插入新元素进入已存在的树当中需遵循一定规则保持原有性质不变。比如,在BST 中总是将小于父亲的关键字放左边,大于等于的父亲右边。 - **删除** 删除某个指定关键字所代表的结点可能会涉及到结构调整以维持整体平衡性和有效性。这一步骤相对较为复杂因为要考虑多种情况如被删者是否有后代等问题[^1]。 #### 动态规划应用于树型问题的例子 当面对一些涉及子树间相互依赖关系的问题时,可以运用动态规划的思想自底向上构建解决方案。例如计算给定满二叉树的最大独立集规模就是一个典型例子。这里我们设f[u][0]/f[u][1] 表示不选取u 结点情况下以其为根的最大独立集成员总数 / 选取u 结点情形下相应数值。转移方程可写做 f[u][0]=sum(max(f[v][0],f[v][1])) 对应每个儿子v ; 而f[u][1]=1+sum(f[v][0]) 同理得到最终答案max(f[root][0],f[root][1])[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值