1.二叉树的基本概念
2.使用递归遍历二叉树
递归的使用方法:
<1>确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
<2>确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
<3>确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
3.二叉树的前序遍历
二叉树前序遍历
方法:递归or迭代
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
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) {
stack<TreeNode*> nd;
vector<int> result;
if(root == NULL) return result;
nd.push(root);
while(!nd.empty())
{
TreeNode* node = nd.top(); //中
nd.pop();
result.push_back(node->val);
if(node->right) nd.push(node->right); //右
if(node->left) nd.push(node->left); //左
}
// traversal(root,result);//递归
return result;
}
};
在递归方法中,后序遍历与中序遍历与此类似。