class Solution {
List<Integer> result = new LinkedList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if (root==null) return result;
if (root.left!=null) {
result=inorderTraversal(root.left);
}
result.add(root.val);
if (root.right!=null){
result=inorderTraversal(root.right);
}
return result;
}
}
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
if (root==null) return result;
TreeNode cur = root;
Stack<TreeNode> st = new Stack<>();
while(cur!=null || !st.isEmpty()){
if (cur!=null){
st.push(cur);
cur = cur.left;
}else{
cur = st.pop();
result.add(cur.val);
cur = cur.right;
}
}
return result;
}
}
class Solution {
public int maxDepth(TreeNode root) {
if (root==null) return 0;
int a = maxDepth(root.left);
int b = maxDepth(root.right);
return Math.max(a,b)+1;
}
}
class Solution {
public int maxDepth(TreeNode root) {
int maxDeep = 0;
if (root==null) return maxDeep;
Queue<TreeNode> st = new LinkedList<>();
st.add(root);
while(!st.isEmpty()){
int size = st.size();
maxDeep++;
for (int i=0;i<size;i++){
TreeNode node = st.poll();
if (node.left!=null) st.add(node.left);
if (node.right!=null) st.add(node.right);
}
}
return maxDeep;
}
}
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root==null) return root;
invertTree(root.left);
invertTree(root.right);
reverse(root);
return root;
}
public void reverse(TreeNode node){
if (node==null) return;
TreeNode temp = node.left;
node.left = node.right;
node.right = temp;
}
}
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root==null) return true;
return dfs(root.left,root.right);
}
public boolean dfs(TreeNode left, TreeNode right){
if (left==null && right==null) return true;
if (left==null || right==null) return false;
if (left.val != right.val) return false;
boolean a = dfs(left.left,right.right);
boolean b = dfs(left.right,right.left);
return a&&b;
}
}
class Solution {
int result;
public int diameterOfBinaryTree(TreeNode root) {
if (root==null) return 0;
result = 0;
dfs(root);
return result;
}
public int dfs(TreeNode node){
if (node==null) return 0;
int left = dfs(node.left);
int right = dfs(node.right);
result = Math.max(result,left+right);
return Math.max(left,right)+1;
}
}