• 二叉树的非递归遍历


    二叉树的非递归遍历,这个实现的是先根遍历

    // Traverse-Tree.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include<iostream>      
    #include<vector>    
    
    
    using namespace std;
    
    
    
    
    struct BiNOde
    {
    	int ele;
    	BiNOde* lnode;
    	BiNOde* rnode;
    };
    
    
    BiNOde*create_tree()
    {
    	BiNOde * root = new BiNOde;
    	BiNOde*node1 = new BiNOde;
    	BiNOde*node2 = new BiNOde;
    	BiNOde*node3 = new BiNOde;
    	BiNOde*node4 = new BiNOde;
    	BiNOde*node5 = new BiNOde;
    	BiNOde*node6 = new BiNOde;
    	BiNOde*node7 = new BiNOde;
    	BiNOde*node8 = new BiNOde;
    	BiNOde*node9 = new BiNOde;
    	BiNOde*node10 = new BiNOde;
    	BiNOde*node11 = new BiNOde;
    	root->ele = 0;
    	node1->ele = 1;
    	node2->ele = 2;
    	node3->ele = 3;
    	node4->ele = 4;
    	node5->ele = 5;
    	node6->ele = 6;
    	node7->ele = 7;
    	node8->ele = 8;
    	node9->ele = 9;
    	node10->ele = 10;
    	node11->ele = 11;
    	root->lnode = node1;
    	root->rnode = node2;
    	node1->lnode = node3;
    	node1->rnode = node4;
    	node2->lnode = node7;
    	node2->rnode = node8;
    	node3->lnode = node5;
    	node3->rnode = node11;
    	node4->lnode = node10;
    	node4->rnode = NULL;
    	node5->lnode = node6;
    	node5->rnode = NULL;
    	node6->lnode = NULL;
    	node6->rnode = NULL;
    	node7->lnode = node9;
    	node7->rnode = NULL;
    	node8->lnode = NULL;
    	node8->rnode = NULL;
    	node9->lnode = NULL;
    	node9->rnode = NULL;
    	node10->lnode = NULL;
    	node10->rnode = NULL;
    	node11->lnode = NULL;
    	node11->rnode = NULL;
    	//BiNOde*node12 = new BiNOde;      
    	//node12->ele = 12;      
    	//node12->lnode = NULL;      
    	//node12->rnode = NULL;      
    	//node6->lnode = node11;      
    
    	return root;
    }
    
    
    vector<BiNOde*>expand(BiNOde*node)
    {
    	cout << node->ele << endl;
    	
    	vector<BiNOde*>aaa;
    	while (node != NULL)
    	{
    		if (node->lnode!=NULL)
    		cout << node->lnode->ele << endl;
    		if (node->rnode != NULL)
    			aaa.push_back(node->rnode);
    		node = node->lnode;
    	}
    
    	return aaa;
    }
    
    
    void Traverse(BiNOde*root)
    {
    	vector<vector<BiNOde*>>aa;
    	if (root == NULL)
    		return;
    	vector<BiNOde*>aaa = expand(root);
    	if (aaa.empty())
    		return;
    	aa.push_back(aaa);
    	while (!aa.empty())
    	{
    		while (aa.back().empty())
    		{
    			aa.pop_back();
    			if (aa.empty())
    				return;
    		}
    		BiNOde*n = aa.back().back();
    		aa.back().pop_back();
    		aaa = expand(n);
    		if (!aaa.empty())
    		{
    			aa.push_back(aaa);
    		}
    
    	}
    }
    
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	BiNOde*root = create_tree();
    	Traverse(root);
    	system("pause");
    	return 0;
    }
    


    版权声明:

  • 相关阅读:
    linux find命令
    busybox的使用
    sql server的数据库个数、表个数及表的数据量统计
    SQL Server查看所有表大小,所占空间
    oracle数据库审计
    oracle --审计
    oracle 增量导出/导入
    MySQL下做Master/Slave同步,延迟太大怎么办?
    【MongoDB】2、安装MongoDB 2.6.1 on Unbuntu 14.04(学习流水账)
    mongodb shell之使用js(二)
  • 原文地址:https://www.cnblogs.com/walccott/p/4956881.html
Copyright © 2020-2023  润新知