console.log(node.val)
DLR(node.left);
DLR(node.right);
LDR(node.left);
console.log(node.val)
LDR(node.right);
LRD(node.left);
LRD(node.right);
console.log(node.val)
function text(T1,T2){
if(T1 == null & T2 ==null){
return true; //当前路径结束,符合条件
}
if (T1 == null || T2 == null){
return false; //当前路径结束,不符合条件
}
return (T1.val == T2.val) && text(T1.left,T2.right) && text(T2.left,T1.right)
//对于每对节点要满足两项,当前两个节点值对称,两个节点下属的节点也都正确
}
var isSymmetric = function(root) {
return text(root,root)
};
var invertTree = function(root) {
if(root!=null){
[root.left,root.right] = [invertTree(root.right),invertTree(root.left)]//转换递归一起哈成,很牛逼.
}
return root;
};
var maxDepth = function(root) {
if(root == null){
return 0
}
return Math.max(maxDepth(root.left),maxDepth(root.right))+1
};
var generateTrees = function(n) {
if(n == 0){return []}
function BST(start,end){
var TreeList = [] 用来存当前递归的全部子树
if(start > end){
return [null]; //为空
}
if(start == end) {
return [new TreeNode(start)];//单节点
};
for(var i = start; i<=end;i++){//以各个元素做跟
var left = BST(start,i-1); //比当前元素小的元素集合
var right = BST(i+1,end); //比当前元素大的元素集合
for(var x = 0;x<left.length;x++){
for(var y = 0;y<right.length;y++){//遍历两个集合 var node = new TreeNode(i)
node.left = left[x];
node.right = right[y];
TreeList.push(node)//添加一个可能的子树
}
}
}
return TreeList;//返回全部可能的子树
}
return BST(1,n)
};
//二叉搜索树满足中序遍历为升序
var isValidBST = function(root) {
var pre = null //记录上一个遍历的节点
function LDR(root){
if(root == null){return true}//结束条件
if(!LDR(root.left)){return false}//中序遍历
if (pre != null && pre.val >= root.val) {return false}//上一个节点比这个节点大,不符合
pre = root//更新上一个节点
return LDR(root.right)//中序遍历
}
return LDR(root)
};