数据结构——二叉树——有序二叉树及相关题目:镜像树,子结构,有序二叉树转双向链表,计算倒数第k个大的数,二叉树对称,之字形打印二叉树

有序二叉树:

        左子树的数据小于根,右子树的数据大于等于根,这种树称为有序二叉树、二叉搜索树、二叉排序树

        注意:这种树的节点需要频繁地插入、删除,因此不适合顺序存储

        注意:插入、删除都要保证有序

        有序二叉树的中序遍历都要保证有序,所以有序二叉树也是一种排序算法,查找又天然是二分查找

常见的题型:

  • 1、把一棵二叉树转换为它的镜像树。
  • 2、输入两棵二叉树A,B,判断B是不是A的子结构(我们约定空树不是任意一个树的子结构)。
  • 3、将一棵有序二叉树转换成一个有序的双向链表。
  • 4、计算出有序二叉树中倒数第K个大的数。
  • 5、判断一个二叉树是否对称。
  • 6、请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

//  有序二叉树

typedef struct TreeNode

{

    int data;

    struct TreeNode* left;

    struct TreeNode* right;

}TreeNode;

TreeNode* create_tree_node(int data)

{

    TreeNode* node = malloc(sizeof(TreeNode));

    node->data = data;

    node->left = NULL;

    node->right = NULL;

    return node;

}

void _insert_tree(TreeNode** root,TreeNode* node)

{

    if(NULL == *root)

    {

        *root = node;  

        return;

    }

    if(node->data < (*root)->data)

        _insert_tree(&((*root)->left),node);

    else

        _insert_tree(&((*root)->right),node);

}

//  添加

void insert_tree(TreeNode** root,int data)

{

    _insert_tree(root,create_tree_node(data));

}

//  中序

void ldr_show(TreeNode* root)

{

    if(NULL == root) return;

    ldr_show(root->left);

    printf("%d ",root->data);

    ldr_show(root->right);

}

void dlr_show(TreeNode* root)

{

    if(NULL == root) return;

    printf("%d ",root->data);

    dlr_show(root->left);

    dlr_show(root->right);

}

void lrd_show(TreeNode* root)

{

    if(NULL == root) return;

    lrd_show(root->left);

    lrd_sho

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyu1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值