代码随想录 (六)二叉树

链式存储的二叉树节点的定义方式:

cpp 复制代码
struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {};
}; 
cpp 复制代码
TreeNode(int x) : val(x), left(NULL), right(NULL) {};

TreeNode表示二叉树节点的数据结构,其中int x表示节点的值,val(x)是将传入的值赋给节点的值成员变量。left(NULL)表示左子节点指针初始化为 NULL,right(NULL)表示右子节点指针初始化为 NULL。这样,在创建二叉树节点时,可以通过调用该构造函数来初始化节点的值和子节点指针。

例如,使用该构造函数创建一个二叉树节点的示例代码如下:

cpp 复制代码
TreeNode* node = new TreeNode(5);

上述代码创建了一个值为 5 的二叉树节点,并且左右子节点指针都初始化为 NULL。

这种构造函数的设计方式是为了方便创建二叉树节点并初始化其值和子节点指针,使得代码编写更加简洁和方便。

递归算法:三要素

1.确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

2.确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

3.确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

先序遍历递归

cpp 复制代码
class Solution {
public:
	void traversal(TreeNode* cur, vector<int>& vec) {
		if (cur == NULL) return;  
		vec.push_back(cur->val);
		traversal(cur->left, vec);
		traversal(cur->right, vec);	
	}
	
	vector<int> preorderTravelsal(TreeNode* root) {
		vector<int> result;
		traversal(root, result);
		return result;
	}
	
	
};
相关推荐
FL17171314几秒前
Geometric Control
人工智能·算法
老鼠只爱大米3 分钟前
LeetCode算法题详解 283:移动零
算法·leetcode·双指针·快慢指针·移动零·move zeroes
过河卒_zh15667668 分钟前
喜讯:第十五批生成合成类算法备案备案号公布
人工智能·算法·aigc·生成式人工智能·算法备案
cpp_250112 分钟前
B3927 [GESP202312 四级] 小杨的字典
数据结构·c++·算法·题解·洛谷
Cx330❀14 分钟前
《C++ 递归、搜索与回溯》第2-3题:合并两个有序链表,反转链表
开发语言·数据结构·c++·算法·链表·面试
AI科技星15 分钟前
电磁耦合常数Z‘的第一性原理推导与严格验证:张祥前统一场论的几何基石
服务器·人工智能·线性代数·算法·矩阵
AI科技星19 分钟前
电场起源的几何革命:变化的引力场产生电场方程的第一性原理推导、验证与统一性意义
开发语言·人工智能·线性代数·算法·机器学习·数学建模
中國龍在廣州23 分钟前
“物理AI”吹响号角
大数据·人工智能·深度学习·算法·机器人·机器人学习
꧁Q༒ོγ꧂27 分钟前
算法详解(二)--算法思想基础
java·数据结构·算法
꧁Q༒ོγ꧂28 分钟前
算法详解(一)--算法系列开篇:什么是算法?
开发语言·c++·算法