zoukankan      html  css  js  c++  java
  • 二叉查找树与平衡二叉树

    二叉查找树

    二叉查找树的性质:对于树中的每一个节点X,它的左子树中所有关键字值小于X的关键字值,它的右子树中的所有关键字值大于X的关键字值。

    二叉查找树的平均深度为O(logN),下面看一下它的相关的操作函数。

    删除一个二叉树(递归形式):

    void MakeEmpty(TreeNode *root)
    {
    	if(root == NULL)
    		return;
    	MakeEmpty(root->left);
    	MakeEmpty(root->right)
    	free(root);
    }
    

    在二叉查找树中找都某个节点:

    TreeNode* Find(TreeNode *root, int x)
    {
    	if(root == NULL)
    		return NULL;
    	if(root->val > x)
    		return Find(root->left, x);
    	else if(root->val < x)
    		return Find(root->right, x);
    	else
    		return root;
    }
    

    在二叉查找树中找最大值:

    //递归版本
    TreeNode* FindMax(TreeNode *root)
    {
    	if(root == NULL)
    		return NULL;
    	if(root->right == NULL)
    		return root->right
    	else
    		return FindMax(root->right);
    }
    
    //迭代版本
    TreeNode* FindMax(TreeNode *root)
    {
    	if(root == NULL)
    		return NULL;
    	while(root->right != NULL)
    	{
    		root = root->right;
    	}
    	retur root;
    }
    

      在编写算法之前,首先把测试用例写好真的很重要,因为测试用例的边界值就是递归函数的出口。

    二叉查找树的插入操作:

    二叉查找树的插入操作很简单,因为第一个要建立的结点一定是根节点,然后每一个结点的插入肯定在叶子结点的地方。

    TreeNode* Insert(TreeNode *root, int x)
    {
    	if(root == NULL)
    	{
    		root = (TreeNode*)malloc(sizeof(TreeNode));
    		root->val = x;
    		root->left = NULL;
    		root->right = NULL;
    	}
    	else
    	{
    		if(root->val > x)
    			root->left = Insert(root->left, x);
    		else if(root->val < x)
    			root->right = Insert(root->right, x);
    	}
    	return root;
    }
    

      

      

  • 相关阅读:
    oracle 锁表查看与解锁
    oracle 监视索引是否使用
    oracle 查看数据库版本
    mybatis 中文做参数报错
    windows mysql绿色版配置
    maven使用本地jar包
    Java 使用Jedis连接Redis数据库(-)
    Linux 安装redis
    ELK之在CentOS7.5上使用rpm包安装配置ELK7版本
    Ubuntu-18.04更改安装源为国内源
  • 原文地址:https://www.cnblogs.com/stemon/p/4764631.html
Copyright © 2011-2022 走看看