JS二叉树的操作

二叉树的构造

复制代码
 1 // 二叉树的数据结构
 2 function treeNode(val) {
 3     this.val = val;
 4     this.left = null;
 5     this.right = null;
 6 }
 7 var nodeRoot = new treeNode("root");
 8 var nodeA = new treeNode('A');
 9 var nodeB = new treeNode('B');
10 var nodeC = new treeNode('C');
11 var nodeD = new treeNode('D');
12 var nodeE = new treeNode('E');
13 var nodeF = new treeNode('F');
14 nodeA.left = nodeC;
15 nodeA.right = nodeD;
16 nodeB.left = nodeE;
17 nodeB.right = nodeF;
18 nodeRoot.left = nodeA;
19 nodeRoot.right = nodeB;
复制代码

二叉树的遍历

深度优先:

1 function dFirstTravel(root) {
2     if (root === null) {
3         return;
4     }
5     console.log(root.val);
6     dFirstTravel(root.left);
7     dFirstTravel(root.right);
8 }

广度优先:

复制代码
 1 function wFirstTravel(nodeRoot) {
 2     // 1初始化一个队列,并把根结点入列队;
 3 
 4     // 2当队列为非空时,循环执行步骤3到步骤5,否则执行6;
 5 
 6     // 3出队列取得一个结点,访问该结点;
 7 
 8     // 4若该结点的左子树为非空,则将该结点的左子树入队列;
 9 
10     // 5若该结点的右子树为非空,则将该结点的右子树入队列;
11 
12     // 6结束。
13     var queue = [];
14     queue.push(nodeRoot);
15     while (queue.length > 0) {
16         var node = queue.shift();
17         console.log(node.val);
18         if (node.left !== null) {
19             queue.push(node.left);
20         }
21         if (node.right !== null) {
22             queue.push(node.right);
23         }
24     }
25 }
复制代码

翻转二叉树

复制代码
 1 function invertTree(root) {
 2     if (root === null) {
 3         return root;
 4     }
 5     var tmp = root.left;
 6     root.left = root.right;
 7     root.right = tmp;
 8     if (root.left !== null) {
 9         arguments.callee(root.left);
10     }
11     if (root.right !== null) {
12         arguments.callee(root.right);
13     }
14     return root;
15 }
复制代码

 

posted @   大脸菌  阅读(606)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示