二叉树的叶子结点
时间: 2023-11-24 13:07:27 浏览: 93
二叉树的叶子结点是指没有子节点的节点,可以使用递归的方法遍历整个二叉树,找到所有的叶子节点。
具体实现如下:
```c++
// 定义二叉树节点结构体
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<int> leafNodes(TreeNode* root) {
vector<int> res;
if (root == NULL) {
return res;
}
if (root->left == NULL && root->right == NULL) { // 当前节点是叶子节点
res.push_back(root->val);
}
vector<int> leftLeafNodes = leafNodes(root->left); // 递归遍历左子树
vector<int> rightLeafNodes = leafNodes(root->right); // 递归遍历右子树
res.insert(res.end(), leftLeafNodes.begin(), leftLeafNodes.end()); // 将左子树和右子树的结果合并
res.insert(res.end(), rightLeafNodes.begin(), rightLeafNodes.end());
return res;
}
```
上述代码中,我们定义了一个 `leafNodes` 函数,它的输入参数是二叉树的根节点指针。如果根节点为空,说明二叉树为空树,直接返回空的结果数组。如果当前节点是叶子节点(即左右子节点都为空),将当前节点的值加入结果数组。然后,再递归遍历左子树和右子树,将左右子树的结果合并到结果数组中,最后返回结果数组即可。
需要注意的是,递归遍历左右子树后得到的结果数组需要合并到当前节点的结果数组中,可以使用 `vector` 的 `insert` 方法将两个数组合并。
阅读全文