您的位置:首页 > 其它

leetcode 226 :Invert Binary Tree

2015-07-04 11:41 302 查看
题目:

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: