zoukankan      html  css  js  c++  java
  • 循环遍历二叉树

    前序遍历 

    struct Node
    {
    	Node*left;
    	Node*right;
    	int data;
    	Node(){ func; }
    };
    
    
    
    Node* create(Node*p, int depth)
    {
    	if (p && depth)
    	{
    		p->left = new Node;
    		p->right = new Node;
    		p->data = depth;
    		create(p->left, depth - 1);
    		create(p->right, depth - 1);
    
    
    	}
    	if (!depth)
    	{
    		p->left = nullptr;
    		p->right = nullptr;
    		p->data = depth;
    
    	}
    
    	return p;
    
    }
    
    
    
    void print1(Node*p)
    {
    	if (p)
    	{
    		cout << p->data << " ";
    		print1(p->left);
    		print1(p->right);
    	}
    }
    
    void print2(Node*head)//利用stack 模拟函数调用过程 来遍历
    {
    	stack<Node* > s;
    
    	Node*p = head;
    
    	{
    		while (p)
    		{
    			s.push(p);
    			cout << p->data << " ";
    			p = p->left;
    		}
    
    		while (!s.empty())
    		{
    			Node*pp = s.top();
    
    			if (pp->right && pp != head)
    			{
    				cout << pp->right->data << " ";
    			}
    			s.pop();
    		}
    
    	}
    
    
    	{
    		p = head->right;
    
    		while (p)
    		{
    			s.push(p);
    			cout << p->data << " ";
    			p = p->left;
    		}
    
    		while (!s.empty())
    		{
    			Node*pp = s.top();
    
    			if (pp->right
    				&& pp != head)
    			{
    				cout << pp->right->data << " ";
    			}
    			s.pop();
    		}
    
    	}
    
    }
    
    
    
    int main()
    {
    
    	Node* head = new Node;
    	create(head, 2);
    
    	head->data = 10;
    	head->left->data = 6;
    	head->right->data = 14;
    
    	head->left->left->data = 4;
    	head->left->right->data = 8;
    
    	head->right->left->data = 12;
    	head->right->right->data = 16;
    
    	print1(head);//递归遍历
    	cout << endl;
    	print2(head);//循环遍历
    
    
    
    
    
    
    	system("pause");
    	return 0;
    }
    
    

     

    中序

    
    void print2(Node*head)
    {
    	stack<Node* > s;
    
    	Node*p = head;
    
    	{
    		while (p)
    		{
    			s.push(p);
    		//	cout << p->data << " ";
    			p = p->left;
    		}
    
    		while (!s.empty())
    		{
    			Node*pp = s.top();
    			cout << pp->data << " ";
    
    			if (pp->right && pp != head  )
    			{
    				
    				cout << pp->right->data << " ";
    			}
    			s.pop();
    		}
    
    	}
    
    
    	{
    		p = head->right;
    
    		while (p)
    		{
    			s.push(p);
    		
    			p = p->left;
    		}
    
    		while (!s.empty())
    		{
    			Node*pp = s.top();
    			cout << pp->data << " ";
    			if (pp->right&& pp != head)
    			{
    				cout << pp->right->data << " ";
    			}
    			s.pop();
    		}
    
    	}
    
    }

    后序

    
    void print2(Node*head)
    {
    	stack<Node* > s;
    
    	Node*p = head;
    
    	{
    		while (p)
    		{
    			s.push(p);
    	
    			p = p->left;		
    		}
    
    		while (!s.empty())
    		{
    			Node*pp = s.top();	
    			if (pp->right && pp != head  )
    			{
    				
    				cout << pp->right->data << " ";
    			}	
    			if ( pp != head)
    			cout << pp->data << " ";
    			s.pop();
    		}
    
    	}
    
    
    	{
    		p = head->right;
    
    		while (p)
    		{
    			s.push(p);
    			p = p->left;
    		}
    
    		while (!s.empty())
    		{
    			Node*pp = s.top();
    		
    			if (pp->right&& pp != head)
    			{
    				cout << pp->right->data << " ";
    			}	
    			cout << pp->data << " ";
    			s.pop();
    		}
    
    	}
    	cout << head->data << " ";
    }
     
  • 相关阅读:
    什么是PostBack(译)
    GridView 多余字符显示省略号,并在Tooltip中显示完整信息
    GridView中添加行单击事件.md
    ASP.NET WebForm 通过 PagedDataSource 实现 Repeater 的分页
    回发或回调参数无效(译)
    jQuery UI Autocomplete Combobox 配 ASP.NET DropDownList
    6个重要的.NET概念:
    ASP.NET 使用Session,避免用户F5刷新时重复提交(转)
    支持行单击、双击事件的GridView和DataList控件(译)
    在TextBox中敲击回车执行ASP.NET后台事件
  • 原文地址:https://www.cnblogs.com/Jansens520/p/6393202.html
Copyright © 2011-2022 走看看