二叉樹的非遞迴遍歷
其他相關演算法
輸入一顆二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根,葉子結點)形成一條路徑,最長路徑的長度為樹的深度
public int treedepth(treenode root)
int left = treedepth(root.left);
int right = treedepth(root.right);
return left>right?left+1:right+1;
}
若二叉樹中任意節點的左右子樹的深度相差不超過1,則為平衡二叉樹
public static int treedepth(treenode root)
int left = treedepth(root.left);
int right = treedepth(root.right);
return left>right?left+1:right+1;
}private static boolean isbalanced(treenode root)
int left = treedepth(root.left);
int right = treedepth(root.right);
int diff = math.abs(left - right);
if(diff>1)
return isbalanced(root.left)&&isbalanced(root.right);
}
private static int lastvisit = integer.min_value;
public boolean isbst(treenode root)else
boolean judgeright = isbst(root.right);
return judgeright;
}
public boolean iscompletetree(treenode root)
queue.offer(node.left);
}else
if(node.right != null)
queue.offer(node.right);
}else
}return true;
}
public void preorder(treenode root)
if (!stack.isempty())
}}
public void inorder(treenode root)
//當node為空時,說明已經遍歷到了最左葉子節點,開始出棧
if (!stack.isempty())
}}
public void postorder(treenode root)else
}while (!output.isempty())
}
public treenode lowestcommonancestor(treenode root, treenode p, treenode q)
return left == null ? right : left;
}
距離分為兩種情況:
1.兩節點分別在左右子樹,則最遠距離為左子樹深度+1+右子樹深度
2.兩節點在同一子樹上,取左子樹和右子樹深度較大的
public static int maxwidth(treenode root)
queuequeue = new arraydeque<>();
int max = 1;
queue.add(root);
while(true)
while(len > 0)
if(t.right != null)
}max=math.max(max,queue.size());
}return max;
}
二叉樹相關演算法
節點 class node t public node t left public node t right public node t value,node t left,node t right public node t value this value,null null 二叉樹 前中後深度...
二叉樹相關演算法 二
leetcode 437.path sum iii 第乙個想法就是遍歷二叉樹,找出每個節點的可能性。這個思路時間複雜度為o n 2 private int num public intpathsum treenode root,int sum private void recur treenode ...
Java 二叉樹演算法
二叉樹演算法的排序規則 1 選擇第乙個元素作為根節點 2 之後如果元素大於根節點放在右子樹,如果元素小於根節點,則放在左子樹 3 最後按照中序遍歷的方式進行輸出,則可以得到排序的結果 左 根 右 二叉樹演算法的核心類,此類只提供了新增和列印輸出的方法 package com.lym.binarytr...