leetcode 226 :Invert Binary Tree

来源:互联网 发布:linux代码学习 编辑:程序博客网 时间:2024/04/29 00:35

题目:
Invert a binary tree.

4
/ \
2 7
/ \ / \
1 3 6 9

to

4
/ \
7 2
/ \ / \
9 6 3 1
分析:
本题是对二叉树的操作,题目要求将二叉树反转,可以有递归和非递归两种实现方法,在编写测试用例的时候,需要构建二叉树和遍历二叉树,所以在代码中一致列出。
代码:

import java.util.LinkedList;import java.util.Queue;public class handleBinaryTree {    private TreeNode root;    /**     * 定义节点类     * @author Don     *     */    public static class TreeNode{        int val;        TreeNode left;        TreeNode right;        TreeNode(int x){val=x;}    }    /**     * 构造函数     */    public handleBinaryTree(){root=null;}    /**     * 构造二叉树     */    public  void buildBinaryTree(TreeNode node,int val){        if(root==null){            root=new TreeNode(val);        }else{            if(val<node.val){                if(node.left==null){                    node.left=new TreeNode(val);                }else{                    buildBinaryTree(node.left,val);                }            }else{                if(node.right==null){                    node.right=new TreeNode(val);                }else{                    buildBinaryTree(node.right,val);                }            }        }    }    /**     * 先序遍历     * @param node     */    public void preOrder(TreeNode node){        if(node!=null){            System.out.print(node.val+".");            preOrder(node.left);            preOrder(node.right);        }    }    /**     * 中序遍历     * @param node     */    public void inOrder(TreeNode node){        if(node!=null){            inOrder(node.left);            System.out.print(node.val+".");            inOrder(node.right);        }    }    /**     * 后序遍历     * @param node     */    public void postOrder(TreeNode node){        if(node!=null){            postOrder(node.left);            postOrder(node.right);            System.out.print(node.val+".");        }    }    /**     * 层序遍历     * @param node     */    public void levelOrder(TreeNode node){        if(root==null) return;        Queue<TreeNode> queue=new LinkedList<TreeNode>();        queue.offer(root);        while(!queue.isEmpty()){            TreeNode temp=queue.poll();            System.out.print(temp.val+".");            if(temp.left!=null) queue.add(temp.left);            if(temp.right!=null) queue.add(temp.right);        }    }    /**     * 二叉树反转递归实现     * @param node     */    public TreeNode invert(TreeNode node){        if(node==null) return null;        TreeNode left=node.left;        TreeNode right=node.right;        node.left=invert(right);        node.right=invert(left);        return node;    }    /**     * 二叉树反转非递归实现     * @param node     * @return     */    public TreeNode invertqueue(TreeNode node){        if(node==null){            return null;        }        Queue<TreeNode> queue=new LinkedList<TreeNode>();        queue.offer(node);        if(!queue.isEmpty()){            TreeNode temp=queue.poll();            TreeNode left=node.left;            node.left=node.right;            node.right=left;            if(node.left!=null){                queue.offer(node.left);            }            if(node.right!=null){                queue.offer(node.right);            }        }        return node;    }    public  static void main(String[] args){        int[] a={4,2,7,1,3,6,9};        handleBinaryTree tree=new handleBinaryTree();        for(int i=0;i<a.length;i++){            tree.buildBinaryTree(tree.root, a[i]);        }        tree.invertqueue(tree.root);        System.out.println("levelOrder:");        tree.levelOrder(tree.root);    }}
0 0
原创粉丝点击