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

      

  • 相关阅读:
    关于回溯与招聘市场
    关于回溯与马
    关于回溯和后宫
    关于兔子
    关于递归和斐波那契数列
    关于递归和汉诺塔
    关于简单汉诺塔
    nodejs报错roll back,because of a error.node.js setup wizard ended prematurel
    fatal error C1859 意外的预编译头错误,只需重新运行编译器
    sqlserver2008 无法设置主体sa的凭据
  • 原文地址:https://www.cnblogs.com/mjn1/p/11460643.html
Copyright © 2011-2022 走看看