对称二叉树

对称二叉树

在这里插入图片描述

import java.util.Scanner;

class TreeNode
{
	 int val;
     TreeNode left;
     TreeNode right;
     TreeNode(int x) { val = x; }
     public static TreeNode CreatTree(TreeNode Root) //根据先序创建二叉树
     {
    	 Scanner input=new Scanner(System.in);
    	 int data=input.nextInt();
    	 if(data==0)
    		 Root=null;
    	 else
    	 {
    		 Root=new TreeNode(data); //生成根节点
    		 Root.left=TreeNode.CreatTree(Root.left); //生成左子树
    		 Root.right=TreeNode.CreatTree(Root.right);	 
    	 }
    	 return Root;
     }
}

class Solution {
	public boolean isSymmetric(TreeNode root)
	{
		if(root.left!=null&&root.right!=null)
		{
			if(root.left.val==root.right.val) //左孩子的值与右孩子的值是否相等
				if(isSymmetric(root.left)&&isSymmetric(root.right))
					return true;
				else
					return false;
			else
				return false;
		}
		else if(root.left==null&&root.right==null)//叶子节点是对称的
			return true;
		else
			return false; 
	}
	public static void main(String[] args)
	{
		TreeNode Root=null;
		Root=TreeNode.CreatTree(Root); //创建树A 
		System.out.println("树已经创建完毕");
		
		Solution ss=new Solution();
		System.out.print(ss.isSymmetric(Root));
	}
}

顺时针打印数组

在这里插入图片描述
==思路:从0,0下标开始,按照右,下,左,上这样的顺序遍历,现在需要就是要确定当前是往右、往下、往左、往上。

class Solution {
	public void spiralOrder(int[][] matrix) 
	{
		int colu=0,row=0;
		int top=0;//上边界
		int bottom=matrix.length-1; //下边界
		int left=0; //左边界
		int right=matrix[0].length-1;//右边界
		while(top<=bottom&&left<=right)
		{
			//往右走
			for(colu=left;colu<=right;colu++)
				System.out.print(" "+matrix[row][colu]);
			//往右走到低后,上边界缩小一个
			colu--;
			top++;
			
			
			//往下走
			for(row=top;row<=bottom;row++)
				System.out.print(" "+matrix[row][colu]);
			//走完后,右边界缩小一个
			row--;
			right--;
			
			//往左走
			for(colu=right;colu>=left&&top<bottom;colu--)
				System.out.print(" "+matrix[row][colu]);
			//走完后,下边界缩小一个
			colu++;
			bottom--;
			
			//往上走
			for(row=bottom;row>=top;row--)
				System.out.print(" "+matrix[row][colu]);
			//走完后,左边界缩小一个
			row++;
			left++;
		}
    }
	
	public static void main(String[] args)
	{
		Solution ss=new Solution();
		int[][] matrix= {
				{1,2,3},
				{4,5,6},
				{7,8,9}
		};
		
		ss.spiralOrder(matrix);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值