zoukankan      html  css  js  c++  java
  • 二叉树(3):对二叉树数的操作

    1.求节点数据差的最大绝对值

               假设节点存储为int数据, 遍历二叉树,找出节点数据差的最大绝对值。题设可以转换为求最大最小问题,最大值-最小值的差即是所求。求最大最小值的子函数如下:

    void decision(NodePoint Root,int &max,int &min)//前序遍历获得最大、最小值
    {
          if(!Root);
    	  else{
    	     if (Root->data>max) 
    			 max=Root->data;
    		 else if(Root->data<min)   
    			 min=Root->data;
    		 decision(Root->leftchild,max,min);
    	     decision(Root->rightchild,max,min);
    	  }
    }
            main函数中相关变量的声明和初始化如下

    int max=Root->data;
    int min=Root->data;
    decision(Root,max,min);
    cout<<abs(max-min)<<endl;
             二叉树的创建点击

    2.递归法求高度

    int depth(NodePoint Root)
    {
    	if(!Root)
    		return -1;//递归结束条件
    	else
    		{int left=depth(Root->leftchild);
    	     int right=depth(Root->rightchild);
    		 return left>right?left+1:right+1;}
    }
                   二叉树的高度指最大层次。层次从0开始依次向下计数。

    3.递归法输出特定层数据

                 思路很简单,嵌套遍历,当level=0,即倘若某个节点位于目标层,递归截至并输出。

    void RecursivePrintAtLevel(NodePoint root, int level)//打印特定层,从0开始计层
    {
        if(level<0||!root);//递归截至条件1
        else if(level==0)//递归截至条件2
    	cout<<root->data<<" ";
        else
           {RecursivePrintAtLevel(root->leftchild,level-1);
            RecursivePrintAtLevel(root->rightchild,level-1);}
    }

    4.层次法遍历逐层输出数据

          即从0层开始,从左到右遍历输出数据。此处使用了队列queue。注意头文件#include <queue>。队列尊崇“先进先出”。push()添加到队尾,pop()弹出队首,front()输出队首。

    void LevelTraverse(NodePoint Root)
    {
       queue<NodePoint> q;
       while(Root||!q.empty())
        {
          if(!q.empty())
            {Root=q.front();q.pop();}
          cout<<Root->data<<" ";
          if(Root->leftchild) q.push(Root->leftchild);
          if(Root->rightchild) q.push(Root->rightchild);
          Root=NULL;
        }
    }
           层次法还有一种思路,先用2求出高度,再使用3遍历输出特定层数据。

        

    部分参考自二叉树常用算法总结

  • 相关阅读:
    记录JavaScript的util.js类库
    Shiro登录中遇到了问题
    【转载】JavaScript导出Excel
    react-router
    react 表单
    html5定位getLocation()
    html5存储方式localstorage和sessionStorage
    position导致Safari工具栏不自动隐藏
    input type="datetime-local" 时placeholder不显示
    vuex(1.0版本写法)
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393136.html
Copyright © 2011-2022 走看看