对于一颗满二叉排序树深度为K,求最小子树根节点值 Python代码实现

对于一颗满二叉排序树深度为K,求最小子树根节点值 Python代码实现

def binary_tree():
n = int(input("请输入层数:"))
a = int(input("清输入三个节点数:"))
b = int(input())
c = int(input())

ma = max(a, b, c)
mi = min(a, b, c)
left = 1
right = pow(2, n) - 1
middle = (left + right) / 2
while True:
    if(middle > mi) and (middle < ma):
        break
    if(middle < mi):
        left = middle + 1
        middle = (left + right) / 2
    elif(middle > ma):
        right = middle -1
        middle = (left + right) / 2
print(int(middle))

一颗满二叉排序树(节点数为2^k - 1,节点值为1至(2^k - 1)),就是一个采用中序遍历结果为自然数顺序的满二叉树,比如,一个3层的满二叉排序树,中序遍历的结果就是1,2,3,4,5,6,7.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是二叉排序树的C语言实现代码,包含了创建、销毁、清空、插入、删除、查找等操作: ```c #include <stdio.h> #include <stdlib.h> // 二叉排序树结点结构体 typedef struct BSTNode { int data; // 结点数据 struct BSTNode *left; // 左子树指针 struct BSTNode *right; // 右子树指针 } BSTNode, *BSTree; // 创建二叉排序树 void createBSTree(BSTree *T) { *T = NULL; } // 销毁二叉排序树 void destroyBSTree(BSTree *T) { if (*T != NULL) { if ((*T)->left != NULL) { destroyBSTree(&((*T)->left)); } if ((*T)->right != NULL) { destroyBSTree(&((*T)->right)); } free(*T); *T = NULL; } } // 清空二叉排序树 void clearBSTree(BSTree *T) { destroyBSTree(T); createBSTree(T); } // 插入指定结点至二叉排序树 int insertBSTree(BSTree *T, int data) { if (*T == NULL) { *T = (BSTree)malloc(sizeof(BSTNode)); (*T)->data = data; (*T)->left = NULL; (*T)->right = NULL; return 1; } else if (data == (*T)->data) { return 0; } else if (data < (*T)->data) { return insertBSTree(&((*T)->left), data); } else { return insertBSTree(&((*T)->right), data); } } // 删除二叉排序树指定结点 int deleteBSTree(BSTree *T, int data) { if (*T == NULL) { return 0; } else { if (data == (*T)->data) { if ((*T)->left == NULL && (*T)->right == NULL) { free(*T); *T = NULL; } else if ((*T)->left == NULL) { BSTree temp = *T; *T = (*T)->right; free(temp); } else if ((*T)->right == NULL) { BSTree temp = *T; *T = (*T)->left; free(temp); } else { BSTree temp = (*T)->right; while (temp->left != NULL) { temp = temp->left; } (*T)->data = temp->data; deleteBSTree(&((*T)->right), temp->data); } return 1; } else if (data < (*T)->data) { return deleteBSTree(&((*T)->left), data); } else { return deleteBSTree(&((*T)->right), data); } } } // 获取二叉排序树指定结点 BSTree getBSTreeNode(BSTree T, int data) { if (T == NULL) { return NULL; } else if (data == T->data) { return T; } else if (data < T->data) { return getBSTreeNode(T->left, data); } else { return getBSTreeNode(T->right, data); } } // 获取二叉排序树根结点 BSTree getBSTreeRoot(BSTree T) { return T; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值