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

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

  • 相关阅读:
    素数线性筛优化
    C++如何求程序运行时间
    02-线性结构4 Pop Sequence
    02-线性结构3 Reversing Linked List
    STL--priority_queue--自定义数据类型
    02-线性结构2 一元多项式的乘法与加法运算
    Linux——安装OpenSSH服务(CentOS系统默认安装了openssh)
    Linux——Vim快速查找功能
    Xmanager——连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次
    解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6756378.html
Copyright © 2011-2022 走看看