对称二叉树
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);
}
}