zoukankan      html  css  js  c++  java
  • MOOC 3.2 二叉树的存储结构及遍历

    // 二叉树的存储结构
    
    typedef struct TreeNode *BinTree;
    typedef BinTree Position;
    struct TreeNode
    {
    	ElementType Data;
    	BinTree Left;
    	BinTree Right;
    };
    
    void PreOrderTraversal(BinTree BT)
    {
    	if(BT) {
    		printf("%d", BT->Data);
    		PreOrderTraversal(BT->Left);
    		PreOrderTraversal(BT->Right);
    	}
    }
    
    void InOrderTraversal(BinTree BT)
    {
    	if(BT) {
    		InOrderTraversal(BT->Left);
    		printf("%d", BT->Data);
    		InOrderTraversal(BT->Right);
    	}
    }
    
    void PostOrderTraversal(BinTree BT)
    {
    	if(BT) {
    		InOrderTraversal(BT->Left);
    		InOrderTraversal(BT->Right);
    		printf("%d", BT->Data);
    	}
    }
    
    // 中序遍历的非递归算法 (左根右) 
    // 遇到一个结点, 就把它压栈, 并去遍历它的左子树
    // 当左子树遍历结束后, 从栈顶弹出这个节点并访问它
    // 然后按其右指针再去遍历该节点的右子树 
    void InOrderTraversal(BinTree BT)
    {
    	BinTree T = BT;
    	Stack S = CreateStack(MaxSize);	// 创建并初始化堆栈S
    	while(T || !IsEmpty(S)) {
    		while(T) {
    			Push(S, T);
    			T = T->Left;
    		}
    		if(!IsEmpty(S)) {
    			T = Pop(S);
    			printf("%5d", T->Data);
    			T = T->Right;
    		}
    	} 
    } 
    
    // 层序遍历
    /* 队列实现: 遍历从根节点开始, 首先将根节点入队, 然后
    开始执行循环: 结点出队, 访问该节点, 其左右儿子入队	*/
    /*
    	1. 从队列中取出一个元素
    	2. 访问该节点所指结点
    	3. 若该元素所指结点的左右孩子结点非空, 则
    	将其左右孩子的指针顺序入队 
    */
    void LevelOrderTraversal(BinTree BT)
    {
    	Queue Q;
    	BinTree T;
    	if(!BT)	return ;	// 若是空树则直接返回 
    	Q = CreateQueue(MaxSize);	// 创建并初始化队列Q 
    	AddQ(Q, BT);
    	while(!IsEmptyQ(Q))
    	{
    		T = DeleteQ(Q);
    		printf("%d
    ", T->Data);	// 访问取出队列的结点 
    		if(T->Left)		AddQ(Q, T->Left);
    		if(T->Right)	AddQ(Q, T->Right);
    	}
    } 
    

      

  • 相关阅读:
    同一个表中今天的数据与昨天的数据合并,并制定列
    ◎UrlEncode 与 ◎UrlDeCode对应Lotusscript
    ExtJS初级教程之ExtJS Grid(三)
    ExtJS初级教程之ExtJS Tree(一)
    Collections常用的静态方法浅析之排序:sort(List list)
    ExtJS初级教程之ExtJS Tree(三)
    不能被复制的字符:'/u0000'
    ExtJS初级教程之ExtJS Tree(二)
    urlwriterfilter地址栏的伪装
    ExtJS初级教程之ExtJS Grid(一)
  • 原文地址:https://www.cnblogs.com/mjn1/p/11460643.html
Copyright © 2011-2022 走看看