首页 > 其他分享 >二叉树

二叉树

时间:2023-12-15 18:57:26浏览次数:22  
标签:node right value 二叉树 push root stack

二叉排序树

class Node {
	constructor(value) {
		this.value = value
		this.left = null
		this.right = null
	}
}

class Tree {
	constructor() {
		this.root = null
		this.travelResult = []
	}
	insertByFather(father, node) {
		if (father.value > node.value) {
			if (father.left === null) {
				father.left = node
			} else {
				this.insertByFather(father.left, node)
			}
		} else {
			if (father.right === null) {
				father.right = node
			} else {
				this.insertByFather(father.right, node)
			}
		}
	}
	insert(value) {
		const node = new Node(value)
		if (this.root === null) {
			this.root = node
		} else {
			this.insertByFather(this.root, node)
		}
	}
	preTravel(node) {
		if (node) {
			this.travelResult.push(node.value)
			this.preTravel(node.left)
			this.preTravel(node.right)
		}
	}
	_preTravel(root) {
		if (root) {
			const stack = []
			stack.push(root)
			while (stack.length > 0) {
				const node = stack.pop()
				this.travelResult.push(node.value)
				if (node.right) {
					stack.push(node.right)
				}
				if (node.left) {
					stack.push(node.left)
				}
			}
		}
	}
	midTravel(node) {
		if (node) {
			this.midTravel(node.left)
			this.travelResult.push(node.value)
			this.midTravel(node.right)
		}
	}
	_midTravel(root) {
		if (root) {
			const stack = []
			let node = root
			while(node || stack.length > 0) {
				while(node) {
					stack.push(node)
					node = node.left
				}
				node = stack.pop()
				this.travelResult.push(node.value)
				node = node.right
			}
		}
	}
	lastTravel(node) {
		if (node) {
			this.lastTravel(node.left)
			this.lastTravel(node.right)
			this.travelResult.push(node.value)
		}
	}
    //后序遍历其实就是前序遍历反转
    //先前序遍历,将结果反转即可
	_lastTravel(root) {
		if (root) {
			const stack = []
			stack.push(root)
			while (stack.length > 0) {
				const node = stack.pop()
				this.travelResult.push(node.value)
				if (node.right) {
					stack.push(node.right)
				}
				if (node.left) {
					stack.push(node.left)
				}
			}
		}
		this.travelResult = this.travelResult.reverse()
	}
}

完全二叉树

class Node {
	constructor(value) {
		this.value = value
		this.left = null
		this.right = null
	}
}

class Tree {
	constructor() {
		this.root = null
		this.travelResult = []
	}

	insert(value) {
		const node = new Node(value)
		if (this.root === null) {
			this.root = node
			return
		}
		const stack = []
		stack.push(this.node)
		while (stack.length > 0) {
			const node = stack.pop()
			if (node.left === null) {
				node.left = node
				return
			} else if (node.right === null) {
				node.right = node
				return
			} else {
				stack.push(node.right)
				stack.push(node.left)
			}
		}
	}

	levelTravel() {
		if (!this.root) {
			return []
		}
		const queue = []
		queue.push(this.root)
		while (queue.length > 0) {
			const node = queue.shift()
			this.travelResult.push(node.value)
			if (node.left) {
				queue.push(node.left)
			}
            if (node.right) {
				queue.push(node.right)
			}
		}
	}
}

 

标签:node,right,value,二叉树,push,root,stack
From: https://www.cnblogs.com/karle/p/17904012.html

相关文章

  • 655. 输出二叉树(中)
    目录题目题解题目给你一棵二叉树的根节点root,请你构造一个下标从0开始、大小为mxn的字符串矩阵res,用以表示树的格式化布局。构造此格式化布局矩阵需要遵循以下规则:树的高度为height,矩阵的行数m应该等于height+1。矩阵的列数n应该等于2的(height+1)次......
  • 第六节:二叉树详解
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 543. 二叉树的直径
    1.题目介绍给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点\(root\)。两节点之间路径的长度由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]......
  • 101. 对称二叉树
    1.题目介绍给你一个二叉树的根节点\(root\),检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围\([1,1000]\)内\(-100<=Node.val<=100\)进阶:你可以运用递归和迭代两种......
  • 226. 翻转二叉树
    1.题目介绍给你一棵二叉树的根节点\(root\),翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]提示:树中节点数目范围在\([0,100]\)内\(-100<=Node.val......
  • C++堆——heap与二叉树和python
    数据结构栈-->stack队列-->queue树-->tree堆-->heap散列-->hash图-->graph图结构一般包括顶点和边邻接矩阵DAG,DirectedAcyclicGraph即「有向无环图」树树(Tree)是一种非线性的数据结构,由n个节点组成,其中每个节点都有零个或多个子节点。......
  • 线索二叉树记录
                                       中序遍历:   BADCE 将树型结构转换为线性结构,每个结点都有直接前驱和直接后继。              ......
  • 力扣101-对称二叉树
    该题难度为【简单】1.尝试自己写,哪怕写个暴力解法也行,没写出来,看官方题解。2.扫了一眼,不太理解,又想了一会“我代码里漏掉的一半在官方思路中是怎么补上的”,再从头看一遍文字解析,“原来是两棵树对比”。这样思路就清晰了,用递归遍历每个节点,比较每次遍历的“根节点”即可。3.......
  • 257. 二叉树的所有路径
    目录题目题解:前序遍历题目给你一个二叉树的根节点root,按任意顺序,返回所有从根节点到叶子节点的路径。题解:前序遍历classSolution:defbinaryTreePaths(self,root:Optional[TreeNode])->List[str]:res=[]self.getPaths(root,'',re......
  • Leetcode刷题day12-二叉树.前中后序遍历
    递归法实现前.中.后序遍历代码随想录(programmercarl.com)解题思路前序遍历:头->左->右中序遍历:左->头->右后序遍历:左->右->头递归法实现流程:1.定义递归函数;2.寻找递归终止条件;3.设计单层递归模块classSolution(): def__init__(self,val=0,left=None,right=None): sel......