精华内容
下载资源
问答
  • 二叉树镜像

    2017-11-18 22:39:41
    二叉树镜像

    解决思路:
    1、先序遍历
    2、判定条件:当前节点是否为空,左右孩子是否为空。

    代码:

    void mirror(TreeNode r) {
        // 判定条件
        if (r == null)
            return;
        if (r.left == null && r.right == null)
            return;
    
        // 交换左右元素
        TreeNode temp = r.left;
        r.left = r.right;
        r.right = temp;
    
        // 递归
        if (r.left != null)
            mirror(r.left);
        if (r.right != null)
            mirror(r.right);
    }
    展开全文
  • 二叉树镜像(破坏二叉树和不破坏二叉树使用非递归实现求解二叉树镜像) 实现过程如下所示: package cn.edu.nwu.tree; import java.util.Stack; /** * @author jcm * *时间 2016年9月16日 */ public class...

    求二叉树镜像(破坏二叉树和不破坏二叉树使用非递归实现求解二叉树镜像)

    实现过程如下所示:

    package cn.edu.nwu.tree;
    
    import java.util.Stack;
    
    /**
     * @author jcm
     *
     *时间 2016年9月16日
     */
    public class GetTreeNodeMirror {
    	public static void main(String[] args) {
    		TreeNode root = CreateBinaryTree.createTreeNode();
    		System.out.println("交换前的二叉树");
    		GetTreeNodeInOrderTraver.inOrderRecursion(root);
    		System.out.println();
    		System.out.println("递归实现二叉树中序遍历");
    		GetTreeNodeInOrderTraver.inOrder(getTreeNodeCopyMirror(root));
    		System.out.println();
    		System.out.println("非递归实现二叉树中序遍历");
    		getTreeNodeMirror(root);
    		GetTreeNodeInOrderTraver.inOrderRecursion(root);
    	}
    	/**
    	 * 求二叉树的镜像
    	 * 这个方法可以看出,他已经破坏了原来的二叉树
    	 * (1)如果二叉树为空,直接return
    	 * (2)如果二叉树不为空,求左子树和右子树的镜像
    	 * (3)交换左子树和右子树 
    	 * (4)原来的树根直接指向交换后的左子树和右子树
    	 * @param root
    	 * @return
    	 */
    	private static void getTreeNodeMirror(TreeNode root){
    		if(root == null){  
                return;  
            }  
            Stack<TreeNode> stack = new Stack<TreeNode>();  
            stack.push(root);  
            while( !stack.isEmpty() ){  
                TreeNode current = stack.pop();  
                // 交换左右孩子  
                TreeNode temp = current.rightRight;  
                current.rightRight = current.leftChild;  
                current.leftChild = temp;  
                if(current.rightRight != null){  
                    stack.push(current.rightRight);  
                }  
                if(current.leftChild != null){  
                    stack.push(current.leftChild);  
                }  
            }
    	}
    	/**
    	 * 求二叉树的镜像
    	 * 这个方法可以看出,如果不能破坏二叉树,则需要定义一个新节点,分别指向二叉树的左子树和右子树
    	 * (1)如果二叉树为空,返回空 
    	 * (2)如果二叉树不为空,求左子树和右子树的镜像,
    	 * (3)交换左子树和右子树 
    	 * @param root
    	 * @return
    	 */
    	private static TreeNode getTreeNodeCopyMirror(TreeNode root){
    		if(root == null){  
                return null;  
            }  
            Stack<TreeNode> stack = new Stack<TreeNode>();  
            Stack<TreeNode> newStack = new Stack<TreeNode>();  
            stack.push(root);  
            TreeNode newRoot = new TreeNode(root.data);  
            newStack.push(newRoot);  
            while(!stack.isEmpty()){  
                TreeNode current = stack.pop();  
                TreeNode newCur = newStack.pop();  
                if(current.rightRight != null){  
                    stack.push(current.rightRight);  
                    newCur.leftChild = new TreeNode(current.rightRight.data);  
                    newStack.push(newCur.leftChild);  
                }  
                if(current.leftChild != null){  
                    stack.push(current.leftChild);  
                    newCur.rightRight = new TreeNode(current.leftChild.data);  
                    newStack.push(newCur.rightRight);  
                }  
            }  
            return newRoot;  
    	}
    }
    


    展开全文
  • 这次给大家带来PHP获取二叉树镜像步骤详解,PHP获取二叉树镜像的注意事项有哪些,下面就是实战案例,一起来看一下。问题操作给定的二叉树,将其变换为源二叉树的镜像。解决思路翻转二叉树,有递归和非递归两种方式,...

    5268f80b9b1e01f982625ef6fac83ca1.png

    这次给大家带来PHP获取二叉树镜像步骤详解,PHP获取二叉树镜像的注意事项有哪些,下面就是实战案例,一起来看一下。

    问题

    操作给定的二叉树,将其变换为源二叉树的镜像。

    解决思路

    翻转二叉树,有递归和非递归两种方式,非递归就是使用队列。

    实现代码<?php

    /*class TreeNode{

    var $val;

    var $left = NULL;

    var $right = NULL;

    function construct($val){

    $this->val = $val;

    }

    }*/

    function Mirror(&$root)

    {

    if($root == NULL)

    return 0;

    $queue = array();

    array_push($queue, $root);

    while(!empty($queue)){

    $node = array_shift($queue);

    $tmp = $node->left;

    $node->left = $node->right;

    $node->right = $tmp;

    if($node->left != NULL)

    array_push($queue, $node->left);

    if($node->right != NULL)

    array_push($queue, $node->right);

    }

    }

    相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

    推荐阅读:

    Lumen timezone 怎样进行时区设置

    PHP实现合并两个排序链表代码分享

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,918
精华内容 2,767
关键字:

二叉树镜像