二叉树的实现(类的定义,前序、中序、后序遍历,求二叉树的结点数目、树的深度、输出叶子结点)。
时间: 2023-04-28 07:01:48 浏览: 108
二叉树的基本操作,建树,先序遍历,中序遍历,后序遍历,叶子数,树深
4星 · 用户满意度95%
二叉树是一种常见的数据结构,可以用类来实现。一个二叉树节点包含一个值和两个指向左右子节点的指针。以下是二叉树类的定义:
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
前序遍历是先访问根节点,再访问左子树,最后访问右子树。中序遍历是先访问左子树,再访问根节点,最后访问右子树。后序遍历是先访问左子树,再访问右子树,最后访问根节点。以下是二叉树的遍历实现:
void preorderTraversal(TreeNode* root) {
if (root == NULL) return;
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
void postorderTraversal(TreeNode* root) {
if (root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
二叉树的节点数目可以通过递归计算左右子树节点数目的和再加上根节点来实现:
int countNodes(TreeNode* root) {
if (root == NULL) return 0;
return countNodes(root->left) + countNodes(root->right) + 1;
}
二叉树的深度可以通过递归计算左右子树深度的较大值再加上1来实现:
int maxDepth(TreeNode* root) {
if (root == NULL) return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
输出二叉树的叶子节点可以通过递归遍历二叉树,当遇到叶子节点时输出节点值:
void printLeaves(TreeNode* root) {
if (root == NULL) return;
if (root->left == NULL && root->right == NULL) {
cout << root->val << " ";
}
printLeaves(root->left);
printLeaves(root->right);
}
阅读全文