亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? avltree.java.bak

?? 數(shù)據(jù)結(jié)構(gòu)中的AVL TREE的實(shí)現(xiàn)
?? BAK
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/**
 *	@ AVLTree.java
 *	@ Designed by BySelf
 */

/**
 *	AVLTree
 *		Class of AVLTree. 
 *	NOTE:
 *		# You should implemment the code left for you, for this homework.
 *		# If you are still not clear about what AVLTree is, you'd better 
 *		   see the powerpoint in this direcory.
 *		# Submit your homework before 0:00 this Saturday.
 *		# You can ask BySelf on bbs anytime you has question.
 */
class AVLTree 
{
	/**
	 *	private AVLTreeNode root;
	 *		The root of this AVLTree.
	 */
	private AVLTreeNode root;

	/**
	 *	Constructor
	 *		Construct a new empty AVLTree, whose root is null.
	 */
	AVLTree()
	{
		root = null;
	}

	/**
	 *	public void remove(int object)
	 *		Delete the tree node whose value is object.
	 *	NOTE:
	 *		The node must be in this tree, otherwise throw exceprion.
	 */
	public void remove(int object)
	{
		AVLTreeNode toDelete = search(object);
		if (isNewNode(toDelete, object))
		{
			throw new RuntimeException("The node to delete is not in this tree");
		}
		delete(toDelete);
	}

	/**
	 *	public void add(int object)
	 *		Add a new node with value _object_ into this tree.
	 *	NOTE:
	 *		If any node in this tree with value _object_ exist, will cause exception.
	 */
	public void add(int object)
	{
		AVLTreeNode newNode = new AVLTreeNode(object);
		AVLTreeNode searchParent = search(object);
		if (!isNewNode(searchParent, object))
		{
			throw new RuntimeException("The node to add is already in this tree");
		}
		insert(searchParent, newNode);
	}

	/** 
	 *	private AVLTreeNode search(int value)
	 *		Search for the node in this tree whose value is given, if 
	 *		no node is found, return the node which will be the parent
	 *		node after a new node whose value is given be inserted into
	 *		this tree (before re-arrange for balance).
	 *	EXAMPLE:
	 *		This tree is currently a 3 nodes tree like:
	 *						[5]
	 *					 [1]   [8]
	 *		when search(5), return the root node
	 *		when search(3), also return the root node 5, for it will be the 
	 *			parent after 3 inserted.
	 */
	private AVLTreeNode search(int value)
	{
		if (root == null)
			return null;

		// fill your code here
		// if you like change the return value
		AVLTreeNode current = root;
		
		while (current.getLeftChild() != null || current.getRightChild() != null)
		{
			if (value == current.getValue())
				return current;
			else if (value < current.getValue())
			{
				if (current.getLeftChild() == null)
					return current;
				current = current.getLeftChild();
			}
			else
			{
				if (current.getRightChild() == null)
					return current;
				current = current.getRightChild();
			}
		}
		return current;	
	}

	/**
	 *	priavte boolean isNewNode(AVLTreeNode node, int value)
	 *		Decide whether the node returned from search is the same as the 
	 *		node we search for.
	 *	NOTE:
	 *		If node.value == value, the node with _value_ is in this tree.
	 */
	private boolean isNewNode(AVLTreeNode node, int value)
	{
		if ( node == null )
			return true;
		return (node.getValue() != value);
	}

	/**
	 *	private void delete(AVLTreeNode toDelete)
	 *		Delete the node toDelete from this AVLTree.
	 *	NOTE:
	 *		# Here are several things you should do:
	 *			1. remove toDelete from this tree
	 *			2. change subTreeHeight
	 *			3. re-arrange the tree, to make this tree balance again
	 *		# Make sure the result tree is balance, and all the node's balance value
	 *		  are correct.
	 *		# The balance value of tree leaf is always 0.
	 */
	private void delete(AVLTreeNode toDelete)
	{
		// fill your code here
		AVLTreeNode node = toDelete.getParent();
		AVLTreeNode newRoot, temp;
		
	/*the node toDelete is the root of the tree*/	
		if ( node == null)
		{
			if ( root.getLeftChild() == null && root.getRightChild() == null)
				root = null;
			else if ( root.getLeftChild() == null )
			{
				root = root.getRightChild();
				root.setParent(null);
				root.setSubTreeHeight(0);
				root.balanceValue = 0;
			}
			else if ( root.getRightChild() == null )
			{
				root = root.getLeftChild();
				root.setSubTreeHeight(0);
				root.balanceValue = 0;
			}
			else
			{
				newRoot= root.getLeftChild();
				if ( newRoot.getRightChild() == null )
				{
					newRoot.setRightChild( root.getRightChild() );
					root.getRightChild().setParent( newRoot );
					root = newRoot;
					root.setSubHeight( root );
					root.setBalance( root );
				}
				else
				{
					while ( newRoot.getRightChild() != null)
						newRoot = newRoot.getRightChild();
					newRoot.getParent().setRightChild( null );
					temp = newRoot.getParent();
					while ( temp != root )
					{
						temp.setSubHeight(temp);
						temp.setBalance(temp);
						temp = temp.getParent();
					}
					newRoot.setParent( null );
					newRoot.setLeftChild( root.getLeftChild() );
					newRoot.setRightChild( root.getRightChild() );
					root.getLeftChild().setParent( newRoot );
					root.getRightChild().setParent( newRoot );
					root = newRoot;
					if ( root.getLeftChild().balanceValue == 1 && root.getLeftChild().getRightChild() == null )
						root.getLeftChild().rotateRight();
					root.setSubHeight( root );
					root.setBalance( root );
				}
			}
			return;
		}

		
	/*the node toDelete is on the left branch of it's parent*/
		if ( node.getLeftChild() == toDelete)
		{
			if ( toDelete.getLeftChild() == null && toDelete.getRightChild() == null )
			{
				node.setLeftChild(null);
				if ( node.balanceValue == 0 )
				{
					node.setSubHeight(node);
					node.setBalance(node);
					node = root;
				}
			}
			else if ( toDelete.getLeftChild() == null )
			{
				toDelete.getRightChild().setParent( node );
				node.setLeftChild( toDelete.getRightChild() );
			}
			else if ( toDelete.getRightChild() == null )
			{
				toDelete.getLeftChild().setParent( node );
				node.setLeftChild( toDelete.getLeftChild() );
			}
			else
			{
				temp = toDelete.getLeftChild();
				if ( temp.getRightChild() != null )
				{
					while ( temp.getRightChild() != null )
						temp = temp.getRightChild();
					temp.setLeftChild( toDelete.getLeftChild() );
					toDelete.getLeftChild().setParent( temp );
					temp.setRightChild( toDelete.getRightChild() );
					toDelete.getRightChild().setParent( temp );
				}
				else
				{
					temp.setRightChild( toDelete.getRightChild() );
					toDelete.getRightChild().setParent( temp );
				}
				temp.setParent( node );
				node.setLeftChild( temp );
				temp.setSubHeight( temp );
				temp.setBalance( temp );
				if ( temp.balanceValue == -1 && temp.getRightChild().balanceValue == -1)
					temp.getRightChild().rotateLeft();
			}

			if ( node.balanceValue != -1 )
				node.balanceValue --;
			else if ( node == root && root.getRightChild().balanceValue == 1 )
			{
				root.getRightChild().rotateRight();
				root.getRightChild().rotateLeft();
			}
			else 
			{	
				if ( node.getRightChild().balanceValue == 1 )
				{
					node.getRightChild().rotateRight();
					node.getRightChild().rotateLeft();
				}
				else
					node.getRightChild().rotateLeft();
			}
			
		}

	/*the node toDelete is on the right branch of it's parent*/
		else
		{
			if ( toDelete.getLeftChild() == null && toDelete.getRightChild() == null )
			{	
				node.setRightChild(null);
				if ( node.balanceValue == 0 )
				{
					node.setSubHeight(node);
					node.setBalance(node);
					node = root;
				}
			}
			else if ( toDelete.getLeftChild() == null )
			{
				toDelete.getRightChild().setParent( node );
				node.setRightChild( toDelete.getRightChild() );
			}
			else if ( toDelete.getRightChild() == null )
			{
				toDelete.getLeftChild().setParent( node );
				node.setRightChild( toDelete.getLeftChild() );
			}
			else
			{
				temp = toDelete.getLeftChild();
				if ( temp.getRightChild() != null)
				{
					while ( temp.getRightChild() != null)
						temp = temp.getRightChild();
					temp.setLeftChild( toDelete.getLeftChild() );
					toDelete.getLeftChild().setParent( temp );
					temp.setRightChild( toDelete.getRightChild() );
					toDelete.getRightChild().setParent( temp );
				}
				else
				{

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产宾馆实践打屁股91| 精品一区二区三区视频在线观看 | 一区二区三区在线视频免费| 777色狠狠一区二区三区| 风间由美一区二区av101| 亚洲bdsm女犯bdsm网站| 国产精品免费视频一区| 欧美老肥妇做.爰bbww| 国产一区二区三区最好精华液| 中文字幕亚洲精品在线观看| 717成人午夜免费福利电影| 99久久99久久久精品齐齐| 久久99国内精品| 偷拍自拍另类欧美| 亚洲欧美激情在线| 国产亚洲欧美色| 欧美一区二区三区免费| 91丨国产丨九色丨pron| 精品一区二区三区在线播放| 性感美女极品91精品| 国产精品久久久久一区| 国产亚洲精品资源在线26u| 日韩一区二区三区在线| 欧美日韩亚洲高清一区二区| 色欧美乱欧美15图片| 波多野结衣中文一区| 国产成人av电影免费在线观看| 看电影不卡的网站| 日本不卡视频一二三区| 三级久久三级久久久| 中文字幕一区二区三区在线不卡| 激情深爱一区二区| 五月综合激情婷婷六月色窝| 亚洲综合色成人| 亚洲欧美激情一区二区| 亚洲欧洲国产日韩| 国产精品美女久久久久久久 | 国产亚洲va综合人人澡精品| 日韩欧美视频在线| 欧美一区二区黄色| 日韩一区二区在线观看视频| 91精品在线免费| 欧美久久一二三四区| 精品视频一区二区三区免费| 欧美日韩一区二区在线观看 | 日本成人在线电影网| 日本女人一区二区三区| 毛片基地黄久久久久久天堂| 经典一区二区三区| 国产mv日韩mv欧美| 粉嫩13p一区二区三区| 国产精品国产自产拍在线| 欧美国产亚洲另类动漫| 18欧美亚洲精品| 亚洲精品乱码久久久久久日本蜜臀| 亚洲三级小视频| 亚洲影视在线播放| 蜜桃久久精品一区二区| 韩国一区二区视频| 国产精品一区二区果冻传媒| 成人精品国产一区二区4080| 91视频xxxx| 91麻豆精品久久久久蜜臀| 欧美成人在线直播| 国产精品麻豆欧美日韩ww| 亚洲色图视频网| 首页综合国产亚洲丝袜| 国产裸体歌舞团一区二区| 成人精品视频一区二区三区尤物| 色视频成人在线观看免| 日韩一区二区三区观看| 国产性天天综合网| 一区二区在线观看免费| 蜜臀精品一区二区三区在线观看| 国产精一区二区三区| 色琪琪一区二区三区亚洲区| 欧美一级在线观看| 国产精品素人视频| 天天做天天摸天天爽国产一区| 久久激情综合网| 91婷婷韩国欧美一区二区| 欧美精品亚洲一区二区在线播放| 久久久不卡网国产精品一区| 亚洲综合色视频| 国产成人免费视频| 欧美日韩国产精品自在自线| 久久久久九九视频| 亚洲va中文字幕| 丁香六月综合激情| 欧美区在线观看| 日本一区二区成人在线| 日韩精品免费专区| 99国产精品久| 日韩欧美中文字幕一区| 亚洲欧美偷拍三级| 奇米综合一区二区三区精品视频 | 欧美一卡在线观看| 亚洲美女一区二区三区| 国内久久精品视频| 欧美日韩精品一区二区三区四区| 中文无字幕一区二区三区| 日韩精品亚洲一区二区三区免费| fc2成人免费人成在线观看播放| 日韩欧美一级在线播放| 亚洲国产婷婷综合在线精品| 成人精品国产福利| 久久久精品黄色| 久久国产精品99久久人人澡| 欧美日韩国产一二三| 自拍偷拍国产精品| 成人性视频免费网站| 精品国产人成亚洲区| 香蕉久久夜色精品国产使用方法 | 26uuu色噜噜精品一区二区| 亚洲bt欧美bt精品777| 色综合视频一区二区三区高清| 久久久久久免费网| 精品一区二区三区的国产在线播放| 欧美性大战久久久久久久| 亚洲色图欧美偷拍| 成人福利在线看| 国产欧美日韩综合精品一区二区| 麻豆精品一区二区| 欧美一区2区视频在线观看| 午夜av区久久| 9191国产精品| 日韩精品五月天| 欧美剧情片在线观看| 亚洲丰满少妇videoshd| 在线免费精品视频| 亚洲精品久久7777| 在线免费观看日韩欧美| 一区二区三区.www| 91在线视频官网| 亚洲女与黑人做爰| 91丨九色丨蝌蚪富婆spa| 亚洲男人都懂的| 在线观看视频一区| 亚洲成av人片在线观看无码| 欧美日韩另类国产亚洲欧美一级| 国产成人小视频| 中文字幕一区二区三区色视频 | 精品在线视频一区| 精品少妇一区二区三区日产乱码| 麻豆精品在线播放| 久久综合九色欧美综合狠狠| 国产美女一区二区| 国产精品久久久久久福利一牛影视 | 国内欧美视频一区二区| 久久伊人中文字幕| 国产成人午夜电影网| 国产精品日日摸夜夜摸av| 国产99精品视频| 国产精品传媒视频| 精品1区2区3区| 日本最新不卡在线| 久久综合九色综合欧美亚洲| 国产馆精品极品| 亚洲男人天堂一区| 欧美区在线观看| 国产乱色国产精品免费视频| 中文久久乱码一区二区| 欧美性做爰猛烈叫床潮| 裸体歌舞表演一区二区| 国产欧美日韩视频在线观看| 色香蕉久久蜜桃| 丝瓜av网站精品一区二区| 久久在线观看免费| 色又黄又爽网站www久久| 日本欧美一区二区| 欧美激情综合在线| 在线观看网站黄不卡| 国产综合色在线视频区| 亚洲三级小视频| 一个色在线综合| 日韩精品一区在线| 97成人超碰视| 蜜臀av一区二区在线免费观看| 欧美国产禁国产网站cc| 欧美午夜精品久久久久久孕妇| 精品一区二区在线看| 亚洲人精品午夜| 日韩精品一区二区三区四区| 波多野结衣中文字幕一区二区三区 | 国产一区二区三区免费观看| 亚洲三级电影全部在线观看高清| 欧美精品一二三| av电影天堂一区二区在线| 视频一区欧美日韩| 国产精品夫妻自拍| 日韩欧美一级片| 日本久久电影网| 成人性生交大片免费看中文 | 一区二区三区四区蜜桃 | 26uuu久久综合| 欧美影院精品一区| 国产99久久久精品| 久久精品理论片| 亚洲一区影音先锋| 国产精品天美传媒|