zoukankan      html  css  js  c++  java
  • 二叉树的非递归遍历

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

    // 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;
    }
    


    版权声明:

  • 相关阅读:
    hdu 5366 简单递推
    hdu 5365 判断正方形
    hdu 3635 并查集
    hdu 4497 数论
    hdu5419 Victor and Toys
    hdu5426 Rikka with Game
    poj2074 Line of Sight
    hdu5425 Rikka with Tree II
    hdu5424 Rikka with Graph II
    poj1009 Edge Detection
  • 原文地址:https://www.cnblogs.com/walccott/p/4956881.html
Copyright © 2011-2022 走看看