zoukankan      html  css  js  c++  java
  • 翻转2元搜索树(镜像)这两种思路

    问题叙述性说明:

    输入搜索树2元,树被转换为它的镜面。

    即在转换后的二元查找树中,左子树的结点都大于右子树的结点。


    算法:

    測试用例:

                                      10

                                 /            

                               5               11

                           /        

                        3            7

                     /             /  

                   2       4     6      9

                 /                       /

              1                       8

    算法:

    有两种思路:

    ①递归。对树翻转。仅仅需对他的左右子树翻转,再交换左右子树的位置就可以。

    ②非递归。设置一个队列queue,从根节点開始处理:人节点先入列,当队列非空时,循环进行下面处理:从队列中取出一节点。交换他的左右子树的位置,将它的左右子节点入列(若存在的话)。当队列为空时,返回。

    代码实现:

    ①递归

    <p align="left"><pre name="code" class="cpp">template<class T>
    void ReverseTree(BinaryTreeNode<T>* t)
    {
    	if (!t)
    		return;
    	BinaryTreeNode<T>* temp = new BinaryTreeNode<T>;
    	temp = t->LeftChild;
    	t->LeftChild = t->RightChild;
    	t->RightChild = temp;
    	ReverseTree(t->LeftChild);
    	ReverseTree(t->RightChild);
    	return;
    }

    
    
    非递归:

    //非递归
    template<class T>
    void ReverseTree2(BinaryTreeNode<T>* t)
    {
    	if (!t)
    		return;
    	Queue<BinaryTreeNode<T>*> q;
    	q.Add(t);
    	BinaryTreeNode<T>* tt = new BinaryTreeNode < T >;
    	while (!q.IsEmpty())
    	{
    		q.Delete(tt);
    		BinaryTreeNode<T>* temp = new BinaryTreeNode < T >;
    		temp = tt->LeftChild;
    		tt->LeftChild = tt->RightChild;
    		tt->RightChild = temp;
    		if (tt->LeftChild)
    			q.Add(tt->LeftChild);
    		if (tt->RightChild)
    			q.Add(tt->RightChild);
    	}
    }
    


    输出測试:

    InOrder(n10);
    	cout << endl;
    	ReverseTree(n10);
    	InOrder(n10);
    	cout << endl;
    
    	ReverseTree2(n10);
    	InOrder(n10);
    	cout << endl;




    版权声明:本文博主原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    一小段代码体现出的编程艺术
    2013年:第十一届软交会今天开始
    干掉baidu地图Logo的CSS
    编程语言历史,你属于几零后?
    WebServer实现SQL数据库百度坐标转换转化的算法
    使用Nginx代理Ext.net2.0异步请求报错问题
    PostgreSQL9.3新增的json_populate_recordset函数使用问题
    坐标转换服务笔录
    关于extjs中文乱码和emptyText的问题
    百度地图Polyline画直线BUG
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4759776.html
Copyright © 2011-2022 走看看