zoukankan      html  css  js  c++  java
  • 树与二叉树之三--二叉树的遍历

      二叉树的遍历包括:先序遍历、中序遍历和后序遍历。其实现的基本思想就是利用递归的方式,以先序遍历为例,首先访问根结点,然后依次分别对它的左子树和右子树进行先序遍历。接下来直接贴实现代码,假设二叉树的结点中存储的是一个整型数据,对二叉树分别进行先、中、后序遍历,依次打印出不同遍历方式下得到的整数序列。

    • 二叉树结点的定义
    struct BinaryTreeNode{
    	int m_nValue;
    	BinaryTreeNode* m_pLeft;
    	BinaryTreeNode* m_pRight;
    }
    
    // 以下为建立和销毁一个二叉树的过程
    BinaryTreeNode* CreateBinaryTreeNode(int value)
    {// 创建一个新的二叉树结点
        BinaryTreeNode* pNode = new BinaryTreeNode();
        pNode->m_nValue = value;
        pNode->m_pLeft = NULL;
        pNode->m_pRight = NULL;
    
        return pNode;
    }
    
    void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight)
    {// 将三个二叉树结点连接起来,其中第一个为父结点,其余两个非别为左右子结点
        if(pParent != NULL)
        {
            pParent->m_pLeft = pLeft;
            pParent->m_pRight = pRight;
        }
    }
    
    void DestroyTree(BinaryTreeNode* pRoot)
    {// 给定一个二叉树的根结点,销毁这个二叉树
        if(pRoot != NULL)
        {
            BinaryTreeNode* pLeft = pRoot->m_pLeft;
            BinaryTreeNode* pRight = pRoot->m_pRight;
    
            delete pRoot;
            pRoot = NULL;
    
            DestroyTree(pLeft);
            DestroyTree(pRight);
        }
    }
    
    • 先序遍历
    void PreOrderTraverse(BinaryTreeNode* pNode)
    {
    	if(pNode != NULL)
    	{
    		cout<<pNode->m_nValue;
    		PreOrderTraverse(pNode->m_pLeft);
    		PreOrderTraverse(pNode->m_pRight);
    	}
    }
    
    • 中序遍历
    void InOrderTraverse(BinaryTreeNode* pNode)
    {
    	if(pNode != NULL)
    	{
    		InOrderTraverse(pNode->m_pLeft);
    		cout<<pNode->m_nValue;
    		InOrderTraverse(pNode->m_pRight);
    	}
    }
    
    • 后序遍历
    void PostOrderTraverse(BinaryTreeNode* pNode)
    {
    	if(pNode != NULL)
    	{
    		PostOrderTraverse(pNode->m_pLeft);
    		PostOrderTraverse(pNode->m_pRight);
    		cout<<pNode->m_nValue;
    	}
    }
    

    以上就是一个二叉树的建立、遍历以及销毁的过程。

  • 相关阅读:
    if、else if 、else及switch...case使用小记(C#)
    c#基础知识
    流与文本文件操作(C#)
    .NET中的异常处理机制(一)
    .NET中的异常处理机制(二)
    在引用类型变量上调用虚方法和非虚方法的区别
    各位客官!鼠标点击一个Button之后究竟发生了什么?您知道么?(C#)
    接口和抽象类的使用场景以及多类继承存在的问题(c#)
    面向对象SOLID设计原则之Open-Closed原则
    stack和stack frame
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6756378.html
Copyright © 2011-2022 走看看