递归
public class 递归 {
class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.val=value;
}
}
public int getHeight(TreeNode root){
if(root==null){
return 0;
}
int leftheight=getHeight(root.left);
int rightheight=getHeight(root.right);
return Math.max(leftheight, rightheight)+1;
}
}
非递归
1.后序遍历二叉树
思路:按后序遍历二叉树,节点最大栈长即为二叉树的高度。
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null){
return 0;
}
int height=0;
Stack<TreeNode> nodes=new Stack<>();
Stack<Integer> tag=new Stack<>();
while(root!=null||!nodes.isEmpty()){
while(root!=null){
nodes.push(root);
tag.push(0);
root=root.left;
}
if(tag.peek()==1){
height=Math.max(height, nodes.size());
nodes.pop();
tag.pop();
root=null;
}else{
root=nodes.peek();
root=root.right;
tag.pop();
tag.push(1);
}
}
return height;
}