程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 算法導論實踐中的教訓

算法導論實踐中的教訓

編輯:C++入門知識

1 昨天因為關鍵字,折騰一天,為何定義的結構體總是說沒有這個定義,原來問題出現在沒有用關鍵字typedef,這個關鍵字通俗點說就是別名的意思,可用用定義的別名來定義其他的變量或函數,當需要改變這個別名類型的時候,只要修改typedef定義就可以做到一改全改的目的,不用一個個去改變類型了。

2 今天因為在函數內部申請的內存,回到原函數是,申請的內存已經被釋放了,百思不得其解,終於看到C++的偉大之處,使用引用&操作符,可以解決這個問題,Mark一下。

二叉查找樹代碼

#include 
using namespace std;

typedef int elemType;

typedef struct biNode
{
	struct biNode *parent,*left,*right;
	elemType key;
}*biTree;

int insertNode(biTree & root,elemType key)
{
	biTree x,y=NULL;
	biTree z=new biNode;

	z->key=key;
	z->parent=z->right=z->left=NULL;

	x=root;
	while (x!=NULL)
	{
		y=x;
		if (z->keykey)
			x=x->left;
		else
			x=x->right;
	}
	z->parent=y;
	if (y==NULL)
		root=z;
	else if (z->keykey)
		y->left=z;
	else
		y->right=z;
	return 0;
}
biTree treeSearch(biTree & root,elemType k)
{
	if (root==NULL||k==root->key)
		return root;
	if (kkey)
		return treeSearch(root->left,k);
	else
		return treeSearch(root->right,k);
	
}
biTree minNode(biTree root)
{
	biTree x=root;
	while (x->left==NULL)
		x=x->left;
	return x;
}

biTree successorNode(biTree root)
{
	biTree x=root;
	biTree y;
	if (x->right!=NULL)
		return minNode(x->right);
	y=x->parent;
	while (y!=NULL&&x==y->right)
	{
		x=y;
		y=y->parent;
	}
	return y;
}

biTree delNode(biTree & root,elemType k)
{
	biTree x=NULL,y=NULL;
	biTree z=treeSearch(root,k);
	if (z->left==NULL||z->right==NULL)
	{
		y=z;
	}
	else
		y=successorNode(z);
	if (y->left==NULL)
	{
		x=y->left;
	}
	else
		x=y->right;

	if (x!=NULL)
	{
		x->parent=y->parent;
	}
	if (y->parent==NULL)
	{
		root=x;
	}
	else if (y=y->parent->left)
	{
		y->parent->left=x;
	}
	else
		y->parent->right=x;

	if (y!=z)
	{
		z->key=y->key;
	}
	return y;
}

void InorderTreeWalk(biTree & root)
{
	if (root!=NULL)
	{
		InorderTreeWalk(root->left);
		cout<key<<"-->";
		InorderTreeWalk(root->right);
	}

}
int main()
{
	biTree root=NULL;
	int num;
	cin>>num;
	for (int i=0;i>temp;
		insertNode(root,temp);
	}
	InorderTreeWalk(root);
	if (treeSearch(root,10)->key==10)
	{
		cout<<"succeed!"<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved