自学数据结构-树

树的代码实现以及遍历,后续再补充

#include<iostream>
#include<queue>
using namespace std;

class treeNode{
	public:
		int val;
		treeNode *left,*right;
		treeNode()
		{
			left=NULL;
			right=NULL;
		}
};

treeNode* build(treeNode* root,int val)
{
	if(root==NULL)
	{
		root=new treeNode();
		root->val=val;
	}
	if(val<root->val)
	    root->left=build(root->left,val);
	else if(val>root->val)
	    root->right=build(root->right,val);
    return root;
}

void levelOrder(treeNode* root){
    queue<treeNode*> q;
    q.push(root);
    while(!q.empty()){
        treeNode *temp = q.front();
        q.pop();
        cout<<temp->val<<" ";
        if(temp->left) q.push(temp->left);
        if(temp->right) q.push(temp->right);
    }
}

void lvrOrder(treeNode* root){
    if(root!=NULL)
	{
//		if(root->left)
//			cout<<"left ="<<root->left->val<<endl;
		cout<<"node ="<<root->val<<endl;
//		if(root->right)
//			cout<<"right ="<<root->right->val<<endl;
    	lvrOrder(root->left);
    	cout<<root->val<<" ";
    	lvrOrder(root->right);
	}
}

void vlrOrder(treeNode* root){
    if(root!=NULL)
	{
		cout<<root->val<<" ";
    	vlrOrder(root->left);
    	vlrOrder(root->right);
	}
}

void lrvOrder(treeNode* root){
    if(root!=NULL)
	{
		vlrOrder(root->left);
    	vlrOrder(root->right);
		cout<<root->val<<" ";
	}
}

int main()
{
    treeNode *root = NULL;
    int t[] = {4,2,6,1,3,5,7};
    for(int i = 0; i < 7; i++) root = build(root, t[i]);
    levelOrder(root);
    cout<<endl;
    lvrOrder(root);
    cout<<endl;
    vlrOrder(root);
    cout<<endl;
    lrvOrder(root);
    cout<<endl;
	return 0;
}

1、递归就是函数调用函数本身,运行起来就是函数嵌套函数,层层嵌套,所以函数调用、参数堆栈都是不小的开销,但是程序简单。
2、非递归就是不断地对参数入栈、出栈,省去了函数层层展开、层层调用的开销。虽然参数出入栈次数多了,但是一般都开辟固定的足够大的内存来一次性开辟、重复使用。
3、非递归是从堆栈的角度来编写程序,速度快,但代码复杂。
递归是从问题本身的逻辑角度来编写,虽然速度相对慢,但代码容易理解。
如果对速度要求不高,建议用递归方式。(来自百度知道总结)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值