二叉树的递归遍历
思路:
1.确定递归函数的参数和返回值:
因为要打印出前序遍历的数值,所以参数里需要传入vector来放结点的数值,除了这一点就不需要再处理什么数据了也不需要返回值,所以递归函数返回类型就是void。
void trsversal(TreeNode*cur,vector<int>&vec)
2.确定终止条件:
在递归的过程中,当遍历结果为空时递归结束。如果当前遍历的节点为空,就直接return。
if(cur==NULL)return;
3.确定单层递归的逻辑:
前序遍历是中左右的循序,所以在单层递归的逻辑,是要先取中间节点的数值
vec.push_back(cur->val);//中
traversal(cur->left,vec);//左
traversal(cur->right,vec);//右
vec:引用类型的整数向量,在遍历过程中用于存储节点值 。这里将 vec 继续传入下一层递归调用,是为了保证在对左子树遍历过程中,新访问到的节点值依然能添加到同一个用于存储遍历结果的向量中,实现遍历结果的持续积累 。
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
解释:

示例 2:
输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
输出:[1,2,4,5,6,7,3,8,9]
解释:

示例 3:
输入:root = []
输出:[]
示例 4:
输入:root = [1]
输出:[1]
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;
}
};
定义一个名为traversal的函数,返回值为void。他接受两个参数,TreeNode*cur用于指向当前遍历到的数节点,vector<int>&vec是一个引用类型的整数向量,用于存储遍历过程中节点的值。如果当前节点cur指向空NULL。则直接返回。将当前节点cur所存储的值添加到向量vec的末尾。递归调用traversal函数,传入当前节点的左子节点以及向量继续对左子序列进行遍历。递归调用traversal函数,传入当前节点的右子节点以及向量继续对右子序列进行遍历。 定义一个名为preorderTraversal的函数,返回值类型为 vector<int>,用于返回二叉树前序遍历的结果,他接受一个参数TreeNode* root。创建一个名为为result的整数向量,用于存储最终的前序遍历的结果。调用前面定义的traversal函数。传入二叉树的根节点root和用于存储结果的向量result。开始执行前序遍历操作,并将遍历得到的节点依次存入result中。返回result。
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[3,2,1]
解释:

示例 2:
输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
输出:[4,6,7,5,2,9,8,3,1]
解释:

示例 3:
输入:root = []
输出:[]
示例 4:
输入:root = [1]
输出:[1]
class Solution {
public:
void traversal(TreeNode*cur,vector<int>&vec){
if(cur==NULL)return;
traversal(cur->left,vec);
traversal(cur->right,vec);
vec.push_back(cur->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int>result;
traversal(root,result);
return result;
}
};
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[3,2,1]
解释:

示例 2:
输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
输出:[4,6,7,5,2,9,8,3,1]
解释:

示例 3:
输入:root = []
输出:[]
示例 4:
输入:root = [1]
输出:[1]
class Solution {
public:
void traversal(TreeNode*cur,vector<int>&vec){
if(cur==NULL)return;
traversal(cur->left,vec);
vec.push_back(cur->val);
traversal(cur->right,vec);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int>result;
traversal(root,result);
return result;
}
};
更多推荐



所有评论(0)