给定一个二叉树,写代码传入根节点后求出直径?二叉树的直径是任意两个节点之间的最远距离。
1
/ \
2 3
/ \
4 5
如上面二叉树的直径为:3.
分析:求二叉树的直径就是求二叉树根节点左右子树的高度之和。
以下是实现的代码:
// 节点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
}BiTreeNode, *BiTree;
// 按照中序遍历的方式创建二叉树
void createBiTree(BiTree *root){
int value;
scanf("%d", &value);
if (value != -1) {
*root = (BiTreeNode *)malloc(sizeof(BiTreeNode));
(*root)->val = value;
createBiTree(&(*root)->left);
createBiTree(&(*root)->right);
} else{
*root = NULL;
}
}
int getHeight(BiTreeNode *root){
if (root == NULL) {
return 0;
}
int leftH = getHeight(root->left);
int rightH = getHeight(root->right);
return MAX(leftH, rightH) + 1;
}
// 求二叉树的直径: 左子树的高度 + 右子树的高度,
int getTreeDiameter(BiTreeNode *root){
if (root == NULL) {
return 0;
}
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return leftHeight + rightHeight;
}
测试代码:
printf("请按照前序遍历方式输入二叉树:\n");
BiTree root = NULL;
createBiTree(&root);
int diameter = getTreeDiameter(root);
printf("二叉树的直径为:%d", diameter);
putchar('\n');
网友评论