• 第十二章:二叉查找树(1)


    二叉查找树的基本操作

    #include <iostream>
    #include <stack>
    
    using namespace std;
    
    stack<TreeNode *> s;
    
    typedef int Data;
    
    struct TreeNode{
    	Data data;
    	TreeNode *parent;
    	TreeNode *left;
    	TreeNode *right;
    };
    
    //创建一颗查找二叉树
    TreeNode *Create_Tree(int num){
    	TreeNode *p=(TreeNode *)malloc(sizeof(TreeNode));
    	TreeNode *root,*child,*parent;
    	child=root=p;
    	p->parent=p->left=p->right=NULL;
    	cin>>root->data;
    	int i=0;
    	while (++i<num){
    		TreeNode *p=(TreeNode *)malloc(sizeof(TreeNode));
    		p->parent=p->left=p->right=NULL;
    		cin>>p->data;
    		child=root;
    		while (child){
    			parent=child;
    			if (p->data>child->data){
    				child=child->right;
    			}else{
    				child=child->left;
    			}
    		}
    		if (p->data>parent->data){
    			parent->right=p;
    			p->parent=parent;
    		}else{
    			parent->left=p;
    			p->parent=parent;
    		}
    	}
    	return root;
    }
    
    TreeNode *Tree_Search(TreeNode *t,int key){
    	while (t&&t->data!=key){
    		if (t->data>key){
    			t=t->left;
    		}else{
    			t=t->right;
    		}
    	}
    	return t;
    }
    
    TreeNode *Minimum(TreeNode *t){
    	while (t->left){
    		t=t->left;
    	}
    	return t;
    }
    
    TreeNode *Maximum(TreeNode *t){
    	while (t->right){
    		t=t->right;
    	}
    	return t;
    }
    
    TreeNode *Tree_Successor(TreeNode *t){
    	if (t->right){
    		return Minimum(t->right);
    	}else{
    		while (t->parent&&t->parent->right==t){
    			t=t->parent;
    		}
    		return t->parent;
    	}
    }
    
    TreeNode *Tree_Predecessor(TreeNode *t){
    	if (t->left){
    		t=t->left;
    		while (t->right){
    			t=t->right;
    		}
    		return t;
    	}else if (t->parent){
    		return t->parent;	
    	}
    }
    

      

  • 相关阅读:
    作为面试官,中级应用级Web前端我会问什么问题
    vue相关项目提示 Failed to resolve Loader: sass-loader
    [Vue warn]: Error in beforeDestroy hook: "Error: [ElementForm]unpected width
    JVM调优方法
    HTTP协议—— 简单认识TCP/IP协议
    关于软件的版本管理
    开源数据库
    PE51
    浅谈限流组件的应用和设计原则
    Spring+AspectJ框架使用实践
  • 原文地址:https://www.cnblogs.com/lsf90/p/3147147.html
Copyright © 2020-2023  润新知