【无标题】

实验题目:

1、以二叉链表作为二叉树的存储结构,中序建立一课二叉树。

2、统计二叉树的叶子结点个数。

3、按层次遍历二叉树的方法,统计二叉树中度为1的节点个数。


实验要求:

1、尝试利用多文件编译实现。

2、熟悉并掌握相关的编码规范。

3、遵从“Honor Code”原则,独立完成相关项目。

cpp
 #ifndef TREE_NODE_H  
 #define TREE_NODE_H  
   #include <iostream>  
   using namespace std;  
   struct TreeNode {  
 int val;  
 TreeNode* left;  
 TreeNode* right;  
 TreeNode(int x) : val(x), left(NULL), right(NULL) {}  
 };  
   class Tree {  
 public:  
 TreeNode* root;  
 Tree(TreeNode* r) : root(r) {}  
 };  
   #endif //TREE_NODE_H 

cpp
 #ifndef BUILD_TREE_H  
 #define BUILD_TREE_H  
   #include "TreeNode.h"  
   TreeNode* buildTree() {  
 // 中序遍历建立二叉树,此处省略具体实现,返回根节点指针  
 }  
   #endif //BUILD_TREE_H 

cpp

#ifndef TREE_OPERATION_H  
#define TREE_OPERATION_H  
  
#include "TreeNode.h"  
#include <iostream>  
  
using namespace std;  
  
// 统计二叉树的叶子节点个数  
int countLeaves(TreeNode* root) {  
    if (root == NULL) {  
        return 0;  
    } else if (root->left == NULL && root->right == NULL) {  
        return 1;  
    } else {  
        return countLeaves(root->left) + countLeaves(root->right);  
    }  
}  
  
// 统计二叉树中度为1的节点个数  
int countDegreeOne(TreeNode* root) {  
    if (root == NULL) {  
        return 0;  
    } else {  
        int leftCount = countDegreeOne(root->left);  
        int rightCount = countDegreeOne(root->right);  
        if (leftCount == 1 || rightCount == 1) {  
            return 1;  
        } else {  
            return leftCount + rightCount;  
        }  
    }  
}  
  
// 按层次遍历二叉树,统计二叉树中度为1的节点个数(非递归)  
void levelOrder(TreeNode* root, int level, int& count) {  
    if (root == NULL) {  
        return;  
    } else if (level == 1) {  // 根节点所在的层次为1,判断当前节点的度数是否为1,是则计数器加1,继续遍历左右子树;否则只遍历左右子树。这里以遍历左子树为例。注意,遍历右子树时需要修改判断条件和递归顺序。这里先省略具体实现。如果需要可以自行完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值