• 二叉查找树与平衡二叉树


    二叉查找树

    二叉查找树的性质:对于树中的每一个节点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;
    }
    

      

      

  • 相关阅读:
    [hive]case 语句中字符串匹配
    shell-删除指定时间前的文件
    tensorflow expand_dims和squeeze
    nexus建立maven仓库私服及Snapshots、release的版本管理
    FileChannel指南
    java8关于时间的新特性
    java程序加到系统托盘的方法
    java程序 避免重复启动的方法
    httpClient 进行get请求
    springboot 多线程的使用
  • 原文地址:https://www.cnblogs.com/stemon/p/4764631.html
Copyright © 2020-2023  润新知