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;




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

  • 相关阅读:
    小水滴
    “星际穿越”观后感(宇宙只是界面,科技永远触摸不到世界的本原)
    惊涛怪浪(double dam-break) -- position based fluids
    [转]Data Structure Recovery using PIN and PyGraphviz
    [转]Adventures in Xen exploitation
    [转]iOS Tutorial – Dumping the Application Memory Part 2
    [转] Building xnu for OS X 10.10 Yosemite
    [转]iOS Tutorial – Dumping the Application Heap from Memory
    [转]Even when one byte matters
    [转]iOS IPC via NSFileCoordinator and NSFilePresenter
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4759776.html
Copyright © 2011-2022 走看看