在leetcode刷题中,二叉树的遍历方法可以简单的分为深度优先遍历和广度优先遍历。深度优先遍历可使用递归,迭代法,广度优先遍历可使用二叉树层序遍历法。本文将以小白的身份记录一下递归遍历法。
在学习中,递归要按照三要素进行:
确定递归参数和返回值,在具体代码中实现,在本案例中,我们要用一个数组的方式来存储遍历的节点,所以参数需要用数组vector来存放数值,由于vec需要进行改变,所以引用的时候需要注意物理引用格式。即vector<int> & vec。
int在声明和定义变量时使用,它表示的意思是所声明或所定义的变量为整型变量。如果其用于函数参数时,其传递方向为值传递,即只能将实参的值传递给形参,而不能将形参的值传递给实参。
int&这里的&不是取地址符号,而是引用符号,引用是C++对C的一个重要补充。变量的引用就是变量的别名,讲的通俗一点就是另外一个名字.
————————————————
版权声明:本文为CSDN博主「可即」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接: https://blog.csdn.net/xiaojinger_123/article/details/120453429
确定终止条件,对于二叉树来说,当遍历到没有节点的时候即终止。
确定单层递归的原理。
根据递归三要素,我们可以去leetcode查看相关题目:
![](https://img-blog.csdnimg.cn/img_convert/d4a1b357f9384dfb8a20b42f7bdb6a46.png)
根据题目要求我们写出满足上述三要求的代码:
递归要确定传递的参数和返回的数值,在该代码中,由于没有需要返回的数值,所以使用void,传递的参数则由自定的一维数组vec进行传递:
void traversal(TreeNode * cur, vector<int>& vec)
终止逻辑:当节点为空时终止:
if(cur ==nullptr) return;
递归单层逻辑:前序遍历法是中左右进行遍历,也就是先取中节点的数值,然后取左节点和右节点的数值。中序遍历则是左中右的方式,也就是先去左节点再去中间节点和右节点,同理,后序遍历是先取左节点,然后右节点,最后中间节点。
注意,中左右可以理解为中间节点遍历顺序。遍历完后,vec放的是前序遍历后所有节点的顺序。
vec.push_back(cur-> value);
traversal(vec -> left, vec);
traversal(vec -> right ,vec);
整篇代码如下:
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> preorderTraversal(TreeNode* root){
vector<int> result;
Traversal(root, result);
return result;
}
};