js解题

树的基础知识

  • 树结构
function TreeNode(val) {
		this.val = val;
		this.left = this.right = null;
	}

  • 前序遍历、中序遍历、后序遍历
	var num=[3,9,20,null,null,15,7]
	function preorder(node) {
		if(node!=null){
			console.log(node.val)
			preorder(node.left)
			preorder(node.right)
		}
	}
	function inorder(node) {
		if(node!=null){
			inorder(node.left)
			console.log(node.val)
			inorder(node.left)
		}
	}
	function postorder(node) {
		if(node!=null){
			postorder(node.left)
			postorder(node.right)
			console.log(node.val)
		}
	}
  • 层次遍历
	function levelorder(root) {//层次遍历
		/***
		 * 思路:利用一个队列,首先将根入队列,以后若队列不空则取对头元素p,
		 * 如果p不空,则访问之,然后将其左右子树入队列,如此循环,知道队列为空
		 *
		 * 队列:先进先出
		 * 尾进:push(),头出shift()
		 */
				// 初始化队列
		var queue=[]
		var level=[0]

		queue.push(root)
		level.push(1)
		while(queue.length>0){
			var nodep=queue.shift()// 取队列头元素p
			if(nodep!=null) {//若节点不为空则左右孩子入队列
				// console.log(nodep.val)// 访问该节点
				queue.push(nodep.left)
				queue.push(nodep.right)
				level.push(level[parseInt(level.length / 2)] + 1)
				level.push(level[parseInt(level.length / 2)] + 1)
			}
		}
		level.sort(function (a,b) {
			return a-b
		})
		return level.pop()-1
	}

  • 深度邮箱遍历、广度优先遍历
function dfsorder(root) { //DFS深度优先遍历
		if(root==null){
			return 0
		}else{
			var leftheight=arguments.callee(root.left)
			var rightheight=arguments.callee(root.right)
			return Math.max(leftheight,rightheight)+1
		}

	}
	function BSTorder(root){
		/***
		 * 搜索树的特点:
		 * 1. 采用中序遍历则是从大到小排列
		 */
		if(root!=null){
			BSTorder(root.left)
			console.log(root.val)
			BSTorder(root.right)
		}
	}

树的相关题目

简单题

  1. 938二叉搜索树的范围和
var inorder=function(node,arr){
				if(node!=null){
					arguments.callee(node.left,arr)
					arr.push(node.val)
					arguments.callee(node.right,arr)
				}
			}
			var rangeSumBST = function(root, L, R) {
				/**
				 * 二叉搜索树的特点:中序遍历后的结果为顺序排列,所以这道题时中序遍历后从L加到R
				 * 所以要返回一个中序遍历的结果
				 */
				var arr=[],rss=0
				inorder(root,arr)
				index1=arr.indexOf(L)
				index2=arr.indexOf(R)
				
				rss=arr.slice(index1,index2+1)
				
				return rss.reduce((befor,cur)=>befor+cur)
				
			}
  1. 617合并二叉树
var mergeTrees = function(t1, t2) {
       if(t1==null){
            return  t2
        }
        if(t2==null){
            return  t1
        }
        t1.val+=t2.val
        t1.left=arguments.callee(t1.left,t2.left)
        t1.right=arguments.callee(t1.right,t2.right)
  
        return  t1
};
  1. 700 二叉搜索树中的搜索
var searchBST = function(root, val) {
			    /**
				 * 分析
				 * 前序遍历到该节点,然后返回该节点
                 * 写成前序遍历的是错的
				 */
            if(root==null){return null}
            if(root!=null){
                if(root.val===val){
                   
                    return root
                }else if(root.val>val){
                    return arguments.callee(root.left,val)
                }else{
                     return arguments.callee(root.right,val)
                }
               
            
            }
        
        };
posted @ 2020-01-06 20:29  终相守  阅读(106)  评论(0)    收藏  举报